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]
나는처럼 보이는이를 사용하여 목록을 만들려고합니다. 이 작업을 수행하는 좋은 방법은 무엇입니까?
감사합니다.
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]
나는처럼 보이는이를 사용하여 목록을 만들려고합니다. 이 작업을 수행하는 좋은 방법은 무엇입니까?
감사합니다.
당신은 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
이 반복 :
고맙습니다. 목록 목록이 필요합니다. 시간은 내게 없어. 난 당신의 코드를 시도하고 그것을 작동합니다. 나는 빠르며 중간 단계 (여기 튜플로 변환)가 필요없는 무언가를 찾고있다. –
파이썬 2.x를 위해 당신은 izip를 사용할 수 있습니다.
이 그 일을하는 수동 방식 (당신이 관심이 있다면) 인 :이 도움이
>>> 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]]
희망!
이 페이지의 많은 부분에서 "assert len (x) == len (y) 및 len (y) == len (z)"을 추가하거나 zip_longest()를 사용하는 것이 좋습니다. 또한 2.x에서 izip은 때로는 우편보다 낫지 만 3.x에서는 우편으로가는 것이 길입니다. – dstromberg
동의. 그들은 모두 똑같은 길이를 가지고 있어야합니다. 나는이 경로가 흥미로울 것이라고 생각했다. 지퍼에 비해 다소 수동적이기 때문이다. – tabchas
확실히 모든 값에 액세스 할 필요가없는 경우 실제 목록을 만들지 말고 필요할 때 조율 된 트리플을 작성하는 접근 자 함수를 만드는 것이 좋습니다. – user1781290
생각해 주셔서 감사합니다.하지만 모든 값에 액세스해야하므로 목록 목록이 필요합니다. –