파이썬에는 두 개의 이터 러블이 있으며 두 쌍으로 반복하고 싶습니다.
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
같은 형제들은 임의의 수의 이터 러블을 인수로 받아 들일 수 있습니다. 예를 들어
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)
답변
이해력을 사용하여 n 번째 요소를 튜플 또는 목록으로 묶은 다음 생성기 함수로 전달할 수 있습니다.
def iterate_multi(*lists):
for i in range(min(map(len,lists))):
yield tuple(l[i] for l in lists)
for l1, l2, l3 in iterate_multi([1,2,3],[4,5,6],[7,8,9]):
print(str(l1)+","+str(l2)+","+str(l3))
답변
누군가가 이와 같은 것을 찾고 있다면 매우 간단하고 쉽다는 것을 알았습니다.
list_1 = ["Hello", "World"]
list_2 = [1, 2, 3]
for a,b in [(list_1, list_2)]:
for element_a in a:
...
for element_b in b:
...
>> Hello
World
1
2
3
목록은 최소 내용 길이까지만 반복되는 zip () 과 달리 전체 내용으로 반복됩니다.
답변
다음은 목록 이해를 통해 수행하는 방법입니다.
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