your programing

두 목록을 병렬로 반복하는 방법은 무엇입니까?

lovepro 2020. 9. 29. 08:16
반응형

두 목록을 병렬로 반복하는 방법은 무엇입니까?


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)

zipfoo거나 멈출 때 bar멈 춥니 다.

에서 파이썬 3 , zip같은 튜플의 반복자 반환 itertools.izipPython2에 있습니다. 튜플 목록을 얻으려면 list(zip(foo, bar)). 그리고 두 반복자가 모두 소진 될 때까지 압축하려면 itertools.zip_longest를 사용 합니다.

파이썬 2

에서 파이썬 2 , zip튜플의 목록을 반환합니다. 이것은 좋은 때입니다 foobar대규모 없습니다. 둘 다 방대한 경우 형성 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)

izipfoo또는 bar소진되면 중지됩니다 . izip_longest때 모두 중지 foobar배출된다. 더 짧은 이터레이터가 소진되면 해당 이터레이터에 해당하는 위치에 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

반응형