728x90
반응형
질문 : 두 목록을 병렬로 반복하는 방법은 무엇입니까?
파이썬에 두 개의 반복 가능 항목이 있으며 쌍으로 살펴보고 싶습니다.
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 range(len(foo)):
print("f: ", foo[i], "; b: ", bar[i])
그러나 그것은 나에게 다소 비정상적인 것처럼 보입니다. 더 나은 방법이 있습니까?
답변
Python 3
for f, b in zip(foo, bar):
print(f, b)
foo
또는 bar
가 중지되면 zip
이 중지됩니다.
Python 3 에서 zip
은 Python2의 itertools.izip
과 같은 튜플의 반복자를 반환합니다. 튜플 목록을 얻으려면 list(zip(foo, bar))
. 두 반복자가 모두 소진 될 때까지 압축하려면itertools.zip_longest를 사용합니다.
Python 2
Python 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)
foo
또는 bar
가 모두 소진 izip
이 중지됩니다. izip_longest
foo
와 bar
가 모두 소진되면 중지됩니다. 더 짧은 반복기가 소진되면 izip_longest
는 해당 반복기에 해당하는 위치에 None
있는 튜플을 생성합니다. 원하는 경우 None
외에 fillvalue
값을 설정할 수도 있습니다. 전체 내용은 여기를 참조하십시오.
또한 zip
및 zip
과 유사한 brethen은 임의의 수의 iterable을 인수로 허용 할 수 있습니다. 예를 들면
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
출처 : https://stackoverflow.com/questions/1663807/how-to-iterate-through-two-lists-in-parallel
728x90
반응형
'개발관련 > other' 카테고리의 다른 글
IF 문을 사용할 때 sheel 명령을 여러 줄로 분할하는 방법 (0) | 2021.11.01 |
---|---|
.NET에서 C # 개체를 JSON 문자열로 바꾸는 방법 (0) | 2021.11.01 |
Inversion of Control 에 대해서 (0) | 2021.10.25 |
Ruby에서 파일에 쓰는 방법 (0) | 2021.10.20 |
Excel interop 개체를 올바르게 정리하는 방법 (0) | 2021.10.14 |