1
votes

Rejoignez les tuples dans la liste

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])]


1 commentaires

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)]


3 Réponses :


6
votes

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 :)


0 commentaires

2
votes

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])))


0 commentaires

3
votes

3 commentaires

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)