Je veux retourner une liste avec les éléments entrelacés de deux listes directement à partir de la compréhension de la liste - sans utiliser une étape suivante pour aplatir le résultat. Est-ce possible?
alist1_temp=[1, 4,2] alist2_temp=[3, 7,4] t=[[x,y] for x,y in zip(alist1_temp, alist2_temp)]
Renvoyer [[1, 3], [4, 7], [2, 4]]
Mais comment puis-je obtenir directement de la liste-compréhension [1, 3, 4, 7, 2, 4]
?
3 Réponses :
Essayez ceci avec seulement zip
pour l'obtenir dans l'ordre que vous voulez:
import itertools list(itertools.chain(alist1_temp, alist2_temp))
si l'ordre ne vous dérange pas, faites simplement: p >
alist1_temp + alist2_temp
ou obtenez-le avec itertools.chain
grâce à @buran:
[i for j in zip(alist1_temp, alist2_temp) for i in j]
avec la chaîne - pourquoi pas simplement list (itertools.chain (alist1_temp, alist2_temp))
? ce n'est pas de la compréhension, mais je ne suis pas sûr que la compréhension soit une exigence stricte. Et de toute façon l'ordre des éléments dans le résultat est différent.
@buran Bien, vous avez sûrement raison
@buran Edited, merci pour votre commentaire
Si vous aimez la manière numpy de faire cela, vous pouvez utiliser ceci!
np.array(t).flatten()
ou vous pouvez également aplatir votre compréhension de liste
np.vstack((alist1_temp,alist2_temp)).flatten('F')
Comme vous avez spécifié que vous voulez l'obtenir à partir de la liste-compréhension:
alist1_temp=[1,4,2] alist2_temp=[3,7,4] L = len(alist1_temp)+len(alist2_temp) t = [alist2_temp[i//2] if i%2 else alist1_temp[i//2] for i in range(L)] print(t) #prints [1, 3, 4, 7, 2, 4]