Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2975 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  liste dans une liste ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

liste dans une liste ?

n°1162965
suizokukan
Posté le 28-07-2005 à 13:20:50  profilanswer
 

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 ?

mood
Publicité
Posté le 28-07-2005 à 13:20:50  profilanswer
 

n°1163173
Taz
bisounours-codeur
Posté le 28-07-2005 à 15:04:22  profilanswer
 

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

n°1163194
masklinn
í dag viðrar vel til loftárása
Posté le 28-07-2005 à 15:15:13  profilanswer
 

[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
n°1163224
suizokukan
Posté le 28-07-2005 à 15:23:05  profilanswer
 

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

n°1163226
Taz
bisounours-codeur
Posté le 28-07-2005 à 15:24:24  profilanswer
 

"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"

n°1163234
masklinn
í dag viðrar vel til loftárása
Posté le 28-07-2005 à 15:27:07  profilanswer
 

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
n°1163263
suizokukan
Posté le 28-07-2005 à 15:35:09  profilanswer
 

 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.

n°1163275
suizokukan
Posté le 28-07-2005 à 15:37:45  profilanswer
 

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
n°1163312
masklinn
í dag viðrar vel til loftárása
Posté le 28-07-2005 à 15:46:44  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  liste dans une liste ?

 

Sujets relatifs
liste déroulante personaliséePb Php/sql, gestion d'une liste dynamique
liste générée a partir de champs contenus dans 2 tablesInsérer une même liste déroulante sur beaucoup de pages
Recupere la valeur en post d'une liste bloquée?double select multiple pour passer des éléments d'une liste à l'autre
Latex : liste dans tableauRécupération liste déroulante
[PHP] Liste déroulant et variable[VBS] liste computer dans AD domaine diff
Plus de sujets relatifs à : liste dans une liste ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR