J'ai:
answer = [item for sublist in mylist for item in sublist[0]] #returns ['a', 'b', 'c', 'd']
J'ai besoin d'une liste avec les lettres et une avec les chiffres, comme ceci:
(['a', 'b', 'c', 'd'], [1, 2, 3])
J'ai fait quelques efforts, mais je n'ai pu obtenir qu'une seule liste avec les lettres, pas les deux:
mylist = [(['a', 'b'], [1, 2]), (['c', 'd'], [3])]
3 Réponses :
answer = [[élément pour la sous-liste dans ma liste pour l'élément dans la sous-liste [i]] pour i dans la plage (2)]
Il suffit de parcourir votre sous-liste :)
zip fonctionne également :
mylist = [(['a', 'b'], [1, 2]), (['c', 'd'], [3])] print(tuple(map(lambda x: x[0]+x[1], zip(mylist[0], mylist[1])))) # (['a', 'b', 'c', 'd'], [1, 2, 3])
Code :
tuple(map(lambda x: x[0]+x[1], zip(mylist[0], mylist[1])))
Voici une alternative simple en utilisant zip a> et itertools.chain a >: from itertools import chain
[list(chain.from_iterable(i)) for i in zip(*mylist)]
# [['a', 'b', 'c', 'd'], [1, 2, 3]]
chain est sympa ... sinon vous pouvez l'éviter et simplement utiliser une liste imbriquée, par exemple: [[a for b in el for a in b] for el in zip (* ma liste)]
Oui, il y a toujours l'alternative list-comp pour aplatir les listes @JonClements, chain est bien pour la concision et les performances
En effet ... en termes d'efficacité cependant, vous voudrez probablement opter pour chain.from_iterable (i) au lieu de chain (* i) car il existe exactement pour ce cas (et à mon humble avis est encore plus explicite que le déballage)
answer = [[élément pour la sous-liste dans ma liste pour l'élément dans la sous-liste [i]] pour i dans la plage (2)]