두 목록을 병렬로 반복하는 방법은 무엇입니까?
Python에 두 개의 반복 가능 항목이 있으며 쌍으로 살펴보고 싶습니다.
foo = (1, 2, 3)
bar = (4, 5, 6)
for (f, b) in some_iterator(foo, bar):
print "f: ", f, "; b: ", b
결과는 다음과 같습니다.
f: 1; b: 4
f: 2; b: 5
f: 3; b: 6
이를 수행하는 한 가지 방법은 인덱스를 반복하는 것입니다.
for i in xrange(len(foo)):
print "f: ", foo[i], "; b: ", b[i]
그러나 그것은 나에게 다소 비정상적인 것처럼 보입니다. 더 나은 방법이 있습니까?
파이썬 3
for f, b in zip(foo, bar):
print(f, b)
zip
짧 foo
거나 멈출 때 bar
멈 춥니 다.
에서 파이썬 3 , zip
같은 튜플의 반복자 반환 itertools.izip
Python2에 있습니다. 튜플 목록을 얻으려면 list(zip(foo, bar))
. 그리고 두 반복자가 모두 소진 될 때까지 압축하려면 itertools.zip_longest를 사용 합니다.
파이썬 2
에서 파이썬 2 , zip
튜플의 목록을 반환합니다. 이것은 좋은 때입니다 foo
및 bar
대규모 없습니다. 둘 다 방대한 경우 형성 zip(foo,bar)
은 불필요하게 방대한 임시 변수이며 목록 대신 반복자를 반환하는 itertools.izip
또는 로 대체해야 itertools.izip_longest
합니다.
import itertools
for f,b in itertools.izip(foo,bar):
print(f,b)
for f,b in itertools.izip_longest(foo,bar):
print(f,b)
izip
foo
또는 bar
소진되면 중지됩니다 . izip_longest
때 모두 중지 foo
및 bar
배출된다. 더 짧은 이터레이터가 소진되면 해당 이터레이터에 해당하는 위치에 izip_longest
있는 튜플을 생성 None
합니다. 또한 다른 설정할 수 있습니다 fillvalue
외에 None
원하는 경우입니다. 전체 내용은 여기를 참조하십시오 .
있음도 참고 zip
하고 zip
-like brethen 인수로 반복 가능 객체의 임의의 수를 수용 할 수 있습니다. 예를 들면
for num, cheese, color in zip([1,2,3], ['manchego', 'stilton', 'brie'],
['red', 'blue', 'green']):
print('{} {} {}'.format(num, color, cheese))
인쇄물
1 red manchego
2 blue stilton
3 green brie
당신은 zip
기능을 원합니다 .
for (f,b) in zip(foo, bar):
print "f: ", f ,"; b: ", b
' zip '기능을 사용해야 합니다. 다음은 자신의 zip 함수가 어떻게 보이는지 예입니다.
def custom_zip(seq1, seq2):
it1 = iter(seq1)
it2 = iter(seq2)
while True:
yield next(it1), next(it2)
while a and b: # condition may change when length not equal
ae, be = a.pop(0), b.pop(0)
print(f"{ae} {be}") # check if None
목록 이해력으로 수행하는 방법은 다음과 같습니다.
a = (1, 2, 3)
b = (4, 5, 6)
[print('f:', i, '; b', j) for i, j in zip(a, b)]
인쇄물:
f: 1 ; b 4
f: 2 ; b 5
f: 3 ; b 6
참고 URL : https://stackoverflow.com/questions/1663807/how-to-iterate-through-two-lists-in-parallel
'your programing' 카테고리의 다른 글
불행히도 MyApp이 중지되었습니다. (0) | 2020.09.29 |
---|---|
오류 java.lang.OutOfMemoryError : GC 오버 헤드 제한 초과 (0) | 2020.09.29 |
Pandas DataFrame의 행 수를 어떻게 얻습니까? (0) | 2020.09.29 |
SSH를 사용하여 서버에서 파일을 다운로드하는 방법은 무엇입니까? (0) | 2020.09.29 |
분리 된 화면 세션 종료 (0) | 2020.09.28 |