Partage
  • Partager sur Facebook
  • Partager sur Twitter

Avoir "None" au lieu d'avoir une liste vide?

Sujet résolu
    18 février 2016 à 22:53:48

    Bonjour, je dois écrire une fonction qui trouve tous les nombres communs dans deux listes différentes et retourner ces nombres dans une liste en les classant par ordre croissant. S'il n'y a aucun élément commun, la fonction doit afficher "None".

    J'ai écrit un script qui me satisfait car il affiche bien les éléments communs aux deux listes, mais mon problème est que, lorsqu'il n'y a aucun élément commun, il retourne une liste vide, alors que je voudrais avoir "None". Une petite idée, svp, pour corriger ce problème? Merci d'avance.

    def unique_common(list1, list2):
        my_list = []
        for item in list1:
            if item in list2 and item not in my_list:
                my_list.append(item)
        my_list.sort()
        return my_list
    
    R1 = unique_common([5, 6, -7, 8, 8, 9, 9, 10],[2, 4, 8, 8, 5, -7])
    print (R1)
    Output : [-7, 5, 8]
    
    R2 = unique_common([5, 6, 7, 0], [3, 2, 3, 2])
    print (R2)
    Output : []



    • Partager sur Facebook
    • Partager sur Twitter
      18 février 2016 à 22:59:00

      pourquoi pas
      return my_list if len(my_list) > 0 else None

      ?

      Et pourquoi tu n'utilises pas une combinaison de sets et de la methode intersection, qui est faite pour je crois ?

      set(list1).intersection(set(list2)

      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        18 février 2016 à 23:02:19

        S'il n'y a aucun élément commun, la fonction doit afficher "None".

        Pourquoi ?

        Ce n'est pas une question bête et méchante, vraiment, quel est la raison qui te force à avoir un None en retour ? Une liste vide représente très bien le fait qu'il n'y aie aucun élément en commun entre les deux listes passées en paramètre.

        Maintenant si tu trouves une raison valable, j'aimerais bien la connaître, et voici comment faire : return my_list or None qui retournera my_listsi elle n'est pas vide, sinon None.

        Edit: +1 pour l'utilisation de set, à condition que l'ordre d'apparition des éléments n'aie pas d'importance.


        Pour info, une liste, comme n'importe quel objet, peut être interprété comme un booléen dans une expression logique :

        >>> lst = [] # Liste vide...
        >>> if not lst:
        ...     print('La liste est vide.')
        ... else:
        ...     print('La liste contient', len(lst), 'élément(s).')
        ... 
        La liste est vide.
        

        -
        Edité par Anonyme 18 février 2016 à 23:15:11

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          18 février 2016 à 23:12:54

          Tu devrais regarder du côté de la structure set
          • Partager sur Facebook
          • Partager sur Twitter
            19 février 2016 à 1:11:51

            Merci beaucoup à tous, fruity, celthon et oldProgrammer, pour toutes vos réponses qui sont très appréciées.

            C'est vrai que le fait d'avoir une liste vide est bien plus significatif que la mention 'None', je suis bien d'accord sur ce point. Mais si l'énoncé de l'exercice est ainsi, je dois m'y soumettre et ce faisant, j'ai appris comment il fallait faire : cela peut me servir à d'autres occasions.

            Encore merci et à bientôt.

            Anpiet 

            • Partager sur Facebook
            • Partager sur Twitter

            Avoir "None" au lieu d'avoir une liste vide?

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown