Forum Programmation.python listes et comparaison

Posté par  .
Étiquettes : aucune
0
22
juin
2006
Bonjour,

Je suis débutant et je voudrais savoir sil y a une syntaxe particulière qui permet aisément de comparer 2 listes entre elles. Biensur il reste toujours la méthode bourin des 2 boucle for imbriquée, ms si il y a possibilité de faire un :

  if listeA==listeB:

print "je suis content!!"


biensûr les éléments des listes à comparer ne sont pas nécessairement indexés dans le même ordre.
  • # Débutant en ?

    Posté par  (site web personnel) . Évalué à -3.

    Moi j'ai un peu d''expérience en français et je peux te dire qu'il n'y a pas de syntaxe simple pour faire ça.
    Mais n'étant pas expert en espéranto, je peux pas te dire si c'est possible ou non.
    • [^] # Re: Débutant en ?

      Posté par  . Évalué à 2.

      Moi, je vote et je dis Python.
      Ce serait quand même un comble si c'était pour un programme en C# ou java dans le forum programmation.python.
      Enfin, ce que j'en dis...
      Désolé doballe, je ne connais pas python, alors je ne peux malheureusement pas t'aider...
  • # Probleme de structure

    Posté par  . Évalué à 3.

    Si les listes ne sont pas ordonnées, il s'agit peut etre d'ensemble (Si on ne compte pas la multiplicité des éléments)

    Dans ce cas la classe Set sera ton ami :


    >>> a=[1,2,3]
    >>> b=[2,1,3]
    >>> a==b
    False
    >>> from sets import *
    >>> Set(a)==Set(b)
    True
    • [^] # Re: Probleme de structure

      Posté par  (site web personnel) . Évalué à 3.

      Sans importer quoi que ce soit, on peut utiliser les sets de base :
      In [1]: a=set([4,8,7])

      In [2]: b=set([8,4,7])

      In [3]: a==b
      Out[3]: True


      http://docs.python.org/tut/node7.html#SECTION007400000000000(...)
    • [^] # Re: Probleme de structure

      Posté par  . Évalué à 1.

      Salut,

      Merci pour cette info très appréciable.
      Encore une fois, python économise les lignes de code, j'imaginais pas à quel point.
      Je viens d'essayer avec les dictionnaires, et ça marche aussi.
      Par contre, cette fois, pour les dictionnaires, j'aimerais bien pouvoir respecter l'association clé-contenu :

      Avec set :


      >>> d[1]='a'
      >>> d[2]='b'
      >>> d[3]='c'

      >>> f={}
      >>> f[1]='b'
      >>> f[2]='a'
      >>> f[3]='c'

      >>> g[1]='a'
      >>> g[2]='b'
      >>> g[3]='c'

      >>> from sets import *
      >>> set(d)==set(g)
      True
      >>> set(d)==set(f)
      True



      et je voudrais avoir set(d)==set(f) à false
      • [^] # Re: Probleme de structure

        Posté par  . Évalué à 1.

        donc tu dois/veux considérer comme égal les listes ou dictionnaires qui contiennent les mêmes éléments, et dans le même ordre ?

        dans ce cas-là, pas moyen d'utiliser une comparaison de set. En effet, un set (ensemble) ne possède pas d'ordre de parcours, au contraire d'une liste...

        si tu veux les mêmes éléments et dans le même ordre, regarde la fonction test_list_equals que j'ai écris plus bas, elle vérifie que la taille est la même (si elle ne l'est pas, les listes ne sont surement pas identiques), et puis vérifie que l'élément n de la première liste est bien le même que celui de la seconde liste.
  • # petite proposition

    Posté par  . Évalué à 1.

    def test_list_same_content(self, list1, list2):
        if len(list1) != len(list2):
            return False
        for elt in list1:
            if elt not in list2:
                return False
        return True
    
    def test_list_equals(self, list1, list2):
        if len(list1) != len(list2):
            return False
        for i in range(len(list1)):
            if list1[i] != list2[i]:
                return False
        return True
    Ici, tu n'a qu'une boucle, qui contient un test, et à moins que je sois fatigué, le résultat est correct. Attention cependant, selon la taille des listes ,il se peut que les doubles boucles imbriquées soient plus rapides... (ya surement moyen de faire encore plus rapide, genre en une ligne, mais je connais mal les possibilités avancées de python)
    • [^] # Re: petite proposition

      Posté par  . Évalué à 1.

      huhu, en voyant la réponse de tuxyl, j'ai un peu l'impression d'avoir pondu un truc cracrabeurk :D

      mais au moins avec mon code, il faut rien importer \o/

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.