2011-10-18 3 views
3

débutant pour python ici.Python: fusionner des listes imbriquées

J'ai 2 listes imbriquées que je veux fusionner:

list1 = ['a', 
     (b, c), 
     (d, e), 
     (f, g, h) ] 

list2 = [(p,q), 
     (r, s), 
     (t), 
     (u, v, w) ] 

la sortie Je cherche est:

list3 = [(a, p, q), 
     (b, c, r, s), 
     (d, e, t), 
     (f, g, h, u, v, w) ] 

peut-il être fait sans bibliothèques externes? Note: len (list1) = len (list2)

+3

* débutant vers python ici. * - Cela signifie que vous devriez lire le [tutoriel] (http://docs.python.org/tutorial/). –

+1

Bonjour. J'ai lu les tuts. Je sais comment fusionner des listes simples. Mais je ne sais pas comment faire avec des listes imbriquées. –

+0

En outre, le premier élément de 'list1' est une chaîne dans votre exemple, mais après la fusion, il semble être un objet. –

Répondre

12

Utilisez la puissance de la fonction zip et list comprehensions:

list1 = [('a',), 
     ('b', 'c'), 
     ('d', 'e'), 
     ('f', 'g', 'h') ] 

list2 = [('p', 'q'), 
     ('r', 's'), 
     ('t',), 
     ('u', 'v', 'w') ] 

print [a + b for a, b in zip(list1, list2)] 
+0

Merci. travaille pour moi. –

2
from operator import add 
list3 = map(add, list1, list2) 
+0

N'a pas essayé, mais merci d'aider. –

+0

Ou, si vous voulez éviter l'importation, 'map (tuple .__ add__, ...)'. (+1 pour ne pas insister sur les compréhensions de liste où 'map()' est plus lisible.) –

0

Si l'ordre dans une liste intérieure/tuple est pas important, vous peut utiliser les opérations d'ensemble mathématiques.

print [tuple (set (a) | set (b)) a, b en zip (x, y)]

L'ensemble (a) | set (b) convertit le iterables a et b à ensembles et prend l'union des deux ensembles. Ils sont ensuite reconvertis en tuple comme souhaité dans le format de sortie.

Comme vous êtes un débutant en python, il est fortement recommandé de maîtriser les listes de compréhension. C'est beaucoup trop puissant et concis. En plus de rendre votre code plus «pythonique», la compréhension des listes peut remplacer les fonctions de «mappage» et de «filtrage».