[1, 109, 2, 109, 2, 130, 2, 131, 2, 132, 3, 28, 3, 127] code> J'ai ce tableau et je veux le transformer en une liste de tuples, chaque tuple a 2 valeurs. La liste devient donc [(1, 109), (2, 109), (2, 130), (2, 131), (2, 132), (3, 28), (3, 127)] code> p>
4 Réponses :
>>> it = iter(L) >>> zip(*[it]*2) [(1, 109), (2, 109), (2, 130), (2, 131), (2, 132), (3, 28), (3, 127)] Explanationit = iter(L) creates iterator on the initial list[it]*2 crates the list consisting of the same iterator twice.* used at the first place in the parameter is used to unpack the parameters, so that zip(*[it]*2) turns into zip(it,it). Though you can use zip(it,it), zip(*[it]*2) is a more general construction, which can be extended to any number of values in the resultant tuple.The core of this approach is that zip on each iteration tries to get one value from each argument. But it turns out that all the arguments are effectively the same iterator, so it yields every time a new value.
Super-intelligent !! +1 pour ça. Mais celui qui tente de comprendre le code, y compris ces lignes, est pire.
@Niklasr Ouais, j'ai écrit des explications après avoir tapé le cœur de la réponse.
Il a l'air très bien, mais malheureusement, il s'appuie sur le fait que zip code> prend des valeurs des itérateurs de gauche à droite, ce qui peut être logique compte tenu de sa production, mais est en réalité un détail de mise en œuvre.
Vous pouvez utiliser Zip combiné avec Tranchement pour créer un nouveau Liste de tuples . Cela générerait une nouvelle liste avec la sortie suivante p> puis utilisez ZIP < / a> Pour combiner ces deux listes dans une liste de tuples. p>
Une autre approche:
lst = [1, 109, 2, 109, 2, 130, 2, 131, 2, 132, 3, 28, 3, 127] print [(lst[i], lst[i + 1]) for i in xrange(0, len(lst), 2)] #[(1, 109), (2, 109), (2, 130), (2, 131), (2, 132), (3, 28), (3, 127)]
Inspiré de la réponse d'Ovgolovine:
>>> it=iter(L) >>> [(next(it), el) for el in it] [(109, 1), (109, 2), (130, 2), (131, 2), (132, 2), (28, 3), (127, 3)]
Connexe: Stackoverflow.com/questions/312443/...
Ce problème connexe consiste à générer une liste de listes b>, ce n'est donc pas un duplication exact, mais il est assez proche et facile à adapter