2010-11-06 21 views
2

Si j'ai une liste imbriquée qui ressemble à ceci:Python comment itérer une liste et comparer la liste des chaînes trouvées dans

bigstringlist = [['rob', 'bob', 'sam', 'angie'], ['jim', 'angie', 'tom', 'sam'], ['sam', 'mary', 'angie', 'sally']]

Comment puis-je itérer cette liste et extraire une liste de noms qui apparaissent dans toutes les listes imbriquées? i.e .:

finallist = ['sam', 'angie'] 

Est-ce que cela serait mieux réalisé en typant cette liste imbriquée en ensemble?

Répondre

11
reduce(set.intersection, map(set , bigstringlist)) 
+0

Cela ne semble pas faire quoi que ce soit, cela fonctionne avec Python 2.6? –

+0

@Luminous_Path: qu'est-ce que tu veux dire __ ne semble pas faire quoi que ce soit__? avec vos données ce code renverra __set (['angie', 'sam']) __ que vous pouvez convertir en liste ... ps: "ça marche en 2.6" – mouad

+0

Nevermind, doit avoir été une sorte d'erreur de syntaxe sur ma partie, merci! –

0

Une variante de la solution de singularité, peut-être un peu plus vite:

bigstringiter = iter(bigstringlist) 
reduce(set.intersection, bigstringiter, set(next(bigstringiter)))