2010-10-25 14 views
1

Je suis un débutant Python, j'ai travaillé avec la liste pendant 2 mois et j'ai quelques questions. J'ai une liste et ils ont des doublons. Je peux obtenir des éléments en double entre 2 listes, maintenant je veux le nombre de listes et la profondeur a augmenté comme cet exemple: http://i219.photobucket.com/albums/cc213/DoSvn/example.png. Je souhaite que les parents d'éléments en double proviennent de la partie rouge, et non de la partie bleue ou de la liste de ces éléments en double. Comment puis-je le faire ? Merci :)Comment obtenir la plus petite liste d'éléments en double dans la liste des listes?


Mise à jour: Merci pour vos réponses: D Je l'ai utilisé serties et est super. Mais je suppose que si je ne connais pas la taille de la liste des listes et rien de plus, ce sont des listes dynamiques, puis-je obtenir toutes les parties rouges comme cet exemple: http://i219.photobucket.com/albums/cc213/DoSvn/example02.png?

+0

Avez-vous envisagé d'utiliser des ensembles au lieu de listes? –

+0

coïncidence ce que vous décrivez a une ressemblance étrange avec les diagrammes de Venn (http://en.wikipedia.org/wiki/Venn_diagram) –

+0

Merci pour vos réponses: D J'ai utilisé Set et c'est génial. Mais je suppose que si je ne connais pas la taille de la liste des listes et rien de plus, ce sont des listes dynamiques, puis-je obtenir toutes les parties rouges comme cet exemple: http://i219.photobucket.com/albums/ cc213/DoSvn/example02.png? –

Répondre

1

Si vous recherchez quelque chose comme ceci: http://i219.photobucket.com/albums/cc213/DoSvn/example02.png

Ensuite, vous peut essayer le compteur (disponible en Python 2.7+). Il devrait fonctionner comme ceci:

from collections import Counter 

c = Counter() 
for s in (listOfLists): 
    c.update(s) 

for item, nbItems in c.iteritems(): 
    if nbItems == 3: 
     print '%s belongs to three lists.' % item 

Ou avec Pythons plus:

counter = {} 

for s in (listOfLists): 
    for elem in s: 
     counter[elem] = counter.get(elem, 0) + 1 

for item, nbItems in counter.iteritems(): 
    if nbItems == 3: 
     print '%s belongs to three lists.' % item 
+0

J'utilise python 2.5 à cause de GAE :) Je pense que je vais utiliser "Set" avec certaines conditions pour résoudre le problème, mais pas avec succès, mais peut-être bon résultat à utiliser dans mon application: D merci :) –

+1

Voilà, une version pour Python 2.5 – eumiro

0

ensembles d'utilisation et vous pouvez obtenir l'intersection, l'union, la soustraction ou toute combinaison complexe

s1 = set([1, 2, 3, 4, 5]) 
s2 = set([4, 5, 6, 7, 8]) 
s3 = set([1, 3, 5, 7, 9]) 

# now to get duplicate between s1, s2 and s2 take intersection 
print s1&s2&s3 

sortie:

set([5]) 
+0

Merci :) votre réponse est utile: D J'ai une autre question, pouvez-vous m'aider? Je suppose que si je ne connais pas la taille de la liste des listes et rien de plus, ce sont des listes dynamiques, puis-je obtenir toutes les parties rouges comme cet exemple: http://i219.photobucket.com/albums/cc213 /DoSvn/example02.png? –

+0

@ ducanh.do88 - mettre à jour votre question avec votre problème suivant – eumiro

Questions connexes