Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3014 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

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
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

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
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]


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?

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-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)