2013-12-08 2 views
0

x, y 및 z 위치가 포함 된 세 개의 목록이 있습니다. 예를 들어이 목록은 거대한 (100 만 개 항목)이다목록 결합 : 세 개의 목록을 하나의 새 목록으로

xyz = [[10,10,12], [20,15,23], [1,2,3]] 

:

x = [10,20,1] 
y = [10,15,2] 
z = [12,23,3] 

나는처럼 보이는이를 사용하여 목록을 만들려고합니다. 이 작업을 수행하는 좋은 방법은 무엇입니까?

감사합니다.

+0

확실히 모든 값에 액세스 할 필요가없는 경우 실제 목록을 만들지 말고 필요할 때 조율 된 트리플을 작성하는 접근 자 함수를 만드는 것이 좋습니다. – user1781290

+0

생각해 주셔서 감사합니다.하지만 모든 값에 액세스해야하므로 목록 목록이 필요합니다. –

답변

4

당신은 zip 내장 함수를 찾고 :

>>> x = [10,20,1] 
>>> y = [10,15,2] 
>>> z = [12,23,3] 
>>> zip(x, y, z) 
[(10, 10, 12), (20, 15, 23), (1, 2, 3)] 

이것은 튜플의 목록을 생성합니다. 당신이 절대적으로 목록의 목록이 필요하면 수동으로 그 튜플을 강요 : 파이썬 3에서, zip 게으른 반복자 대신 목록 (파이썬 2 itertools.izip와 같은)을 반환

>>> [list(t) for t in zip(x, y, z)] 
[[10, 10, 12], [20, 15, 23], [1, 2, 3]] 

참고. 목록이 그만큼 크다면 실제로 좋을 수도 있지만 반복자는 첨자가 될 수 없다는 것을 기억하십시오. 대신에 데이터를 복사하는 목록에서

from itertools import izip 

for a,b,c in izip(x,y,z): 
    # do something 

이 반복 :

+0

고맙습니다. 목록 목록이 필요합니다. 시간은 내게 없어. 난 당신의 코드를 시도하고 그것을 작동합니다. 나는 빠르며 중간 단계 (여기 튜플로 변환)가 필요없는 무언가를 찾고있다. –

2

파이썬 2.x를 위해 당신은 izip를 사용할 수 있습니다.

0

이 그 일을하는 수동 방식 (당신이 관심이 있다면) 인 :이 도움이

>>> xyz = [] 
>>> x = [10, 20, 1] 
>>> y = [10, 15, 2] 
>>> z = [12, 23, 3] 
>>> 
>>> for num in range(3): #Change 3 to however many numbers u want 
...  xyz.append([x[num], y[num], z[num]]) 
... 
>>> print xyz 
[[10, 10, 12], [20, 15, 23], [1, 2, 3]] 

희망!

+1

이 페이지의 많은 부분에서 "assert len ​​(x) == len (y) 및 len (y) == len (z)"을 추가하거나 zip_longest()를 사용하는 것이 좋습니다. 또한 2.x에서 izip은 때로는 우편보다 낫지 만 3.x에서는 우편으로가는 것이 길입니다. – dstromberg

+0

동의. 그들은 모두 똑같은 길이를 가지고 있어야합니다. 나는이 경로가 흥미로울 것이라고 생각했다. 지퍼에 비해 다소 수동적이기 때문이다. – tabchas

관련 문제