2016-07-06 4 views
0

Ich habe 2 Listen, die ich zu einer einzigen Liste von Tupeln kombinieren möchte, so dass die Reihenfolge beibehalten wird und result[i](first[i], second[i]) ist. Angenommen, die beiden Listen haben immer die gleiche Größe. Gibt es eine Möglichkeit, dies mithilfe des Listenverständnisses zu tun? So zum Beispiel:Python: 2 geordnete Listen in Liste von Tupeln kombinieren

>>> first = [1,2,3] 
>>> second = [4,5,6] 
>>> combine(first, second) 
[(1,4), (2,5), (3,6)] 

Ich habe ein paar Dinge ausprobiert

[(i,j) for i in first, j in second] 
[(i for i in first, j for j in second)] 
[(i,j) for i,j in first, second] 

Keines dieser Arbeit. Ich frage mich nur, ob das möglich ist oder ob ich es mit einer Schleife machen muss.

Antwort

7

Verwendung Zip:

list(zip(first, second)) 
Out[384]: [(1, 4), (2, 5), (3, 6)] 
+0

Warum wickeln Sie es in 'list'? Fehle ich in meinem einfachen Gebrauch von 'zip' ein Randfall? – Spacedman

+2

@Spacedman In Python 3 gibt zip() einen Iterator anstelle einer Liste zurück. Ich habe hinzugefügt, dass es für beide Versionen funktioniert. – ayhan

+0

'zip' dient sicherlich dem Zweck, aber nur für die Frage, ist es möglich mit Listenverständnis oder nicht? – ewok

2

Sie können mit den integrierten zip Funktion:

>>> first = [1,2,3] 
>>> second = [4,5,6] 
>>> list(zip(first, second)) 
[(1,4), (2,5), (3,6)] 
6

Python hat eine Funktion dafür:

>>> zip(first, second) 
[(1, 4), (2, 5), (3, 6)] 

zippedy-doo-dah

0

Verwenden Sie izip:

>>> first = [1,2,3] 
>>> second = [4,5,6] 

>>> from itertools import izip 
>>> gen = izip(first, second) 
>>> [(i, j) for i, j in gen] 
[(1, 4), (2, 5), (3, 6)] 
1
>>> first = [1,2,3] 
>>> second = [4,5,6] 
>>> list =zip(first,second) 
>>> list 
[(1, 4), (2, 5), (3, 6)] 

oder auch anstelle von Tupel für Listen, numpy mit

>>> lista = [first,second] 
>>> import numpy as np 
>>> np.array(lista) 
array([[1, 2, 3], 
     [4, 5, 6]]) 
>>> np.array(lista)[:,0] 
array([1, 4]) 
>>> np.array(lista)[:,1] 
array([2, 5]) 
>>> np.array(lista)[:,2] 
array([3, 6])