liste dans une liste ?

liste dans une liste ? - Python - Programmation

Marsh Posté le 28-07-2005 à 13:20:50    

Bonjour à tous et à toutes !
 
Je me demandais quelle était la méthode la plus simple pour vérifier qu'une liste était présente dans une liste.
 
Le programme suivant ne 'marche' pas :

Code :
  1. l = ["a","b"]
  2. ll = ["a","b","c" ]
  3. if (l in ll)==True:
  4.     print "Ok"
  5. else:
  6.     print "Non"


 
Avez-vous une idée plus élégante que la comparaison systématique de chaque élément de la liste, du genre :
 

Code :
  1. l = ["a","b"]
  2. ll = ["a","b","c" ]
  3. flag=True
  4. for e in l:
  5.     if (e in ll)==False:
  6.         flag = False
  7.        
  8. if flag==True:
  9.     print "Ok, l fait bien partie de ll"


 
J'ai l'impression que c'est bien lourd... une idée ?

Reply

Marsh Posté le 28-07-2005 à 13:20:50   

Reply

Marsh Posté le 28-07-2005 à 15:04:22    

if (l in ll)==True:
 
mouahahah  
 
 
if l in ll:
 
ça suffit
 
 
après tu veux faire quoi :
- inclusion ?
- l'ordre a une importance ?
 

Reply

Marsh Posté le 28-07-2005 à 15:15:13    

[i for i in l if i not in ll]


 
Si le résultat n'est pas vide, ça veut dire que "l" n'est pas une sublist de "ll"
 
Exemple:

>>> l = ["a","b"]
>>> ll = ["a","b","c"]
>>> r = [i for i in l if i not in ll]
>>> if(r):
...     print "Différents"
... else:
...     print "Sublist"
...
Sublist
>>> lll = ["a","c","d"]
>>> r = [i for i in lll if i not in ll]
>>> if(r):
...     print "Différents"
... else:
...     print "Sublist"
...
Différents


 
Et dans ton résultat ("r" chez moi) tu récupères tous les éléments de ta "sous liste" (potentielle) non présents dans ta liste de référence:

>>> r
['d']


 
edit: en variante, tu peux en faire un détecteur d'intersection entre deux listes (suffit d'enlever les "in", le résultat contiendra tous les éléments communs aux deux listes, si résultat vide les ensembles des listes sont disjoints)


Message édité par masklinn le 28-07-2005 à 15:27:55

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 28-07-2005 à 15:23:05    

> Masklin et Taz, merci beaucoup... j'étudie cela en détail.

Reply

Marsh Posté le 28-07-2005 à 15:24:24    

"if not(i in ll)"
 
beurk. Parenthèses inutile. Pis encore : est-ce que tu t'exprimes comme ça ? non, moi je dis plutot "if i not in ll"

Reply

Marsh Posté le 28-07-2005 à 15:27:07    

Taz a écrit :

"if not(i in ll)"
 
beurk. Parenthèses inutile. Pis encore : est-ce que tu t'exprimes comme ça ? non, moi je dis plutot "if i not in ll"


J'avais déjà corrigé quand t'as posté ça, vil brequin :o :o :o
(j'étais plus sûr de la validité de "i not in ll" sur mon premier jet, j'utilise trop de langages pourris ces temps ci [:sisicaivrai])
 
edit: ah merde, en fait j'avais oublié de corriger la toute première occurence, j'avais corrigé que l'exemple :whistle:


Message édité par masklinn le 28-07-2005 à 15:28:25

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 28-07-2005 à 15:35:09    

 Ok, Masklinn, merci beaucoup, je viens de comprendre.
 
  Alors pour ceux qui comme moi ont du mal :)
 
  [i for i in l if not(i in ll)] signifie :
 
  [] on renvoie une liste
  [i] on renvoie une liste des i
  [i for i in l] on renvoie une liste des 'i' contenus dans 'l'
  [i for i in l if not(i in ll)] on renvoie une liste des 'i' contenus dans 'l' SI ces i ne sont pas dans ll.
 
  C'est vraiment impressionnant de concision et d'efficacité. Merci encore.

Reply

Marsh Posté le 28-07-2005 à 15:37:45    

Ok, Masklinn, merci beaucoup, je viens de comprendre.
 
  Alors pour ceux qui comme moi ont du mal :)
 
  [i for i in l if i not in ll] signifie :
 
  [] on renvoie une liste
  [i] on renvoie une liste des i
  [i for i in l] on renvoie une liste des 'i' contenus dans 'l'
  [i for i in l if i not in ll] on renvoie une liste des 'i' contenus dans 'l' SI ces i ne sont pas dans ll.
 
  C'est vraiment impressionnant de concision et d'efficacité. Merci encore.
 
edit : je tiens compte de la remarque de Taz.


Message édité par suizokukan le 28-07-2005 à 15:40:21
Reply

Marsh Posté le 28-07-2005 à 15:46:44    

Ca porte un nom et c'est dans la doc hein [:dawa]
 
Accessoirement, je ne peux que trop te conseiller:
1- le Python Tutorial, t'en as bien besoin [:marc] (paske tu codes du Java en Python :o)
2- Dive Into Python [:marc]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed