2014-02-05 5 views
1

Предположим, я два списка, foo и bar экземпляры следующим образом:Как перебирать два списка сразу?

foo = ['Hello', 'Yes', 'No'] 
bar = ['Bonjour', 'Oui', 'Non'] 

Предположим, то, что я хотел перебрать значения и напечатать конкатенацию как так:

count = 0 
for x in foo: 
    print x + bar[count] 
    count += 1 

который даст я:

HelloBonjour

YesOui

NoNon

Будет ли метод, который не потребует подсчета итератор? Возможно, что-то в соответствии с ...

for x in foo and y in bar: 
    pint x + y 

есть в наличии?

ответ

13

Вы можете использовать zip:

foo = ['Hello', 'Yes', 'No'] 
bar = ['Bonjour', 'Oui', 'Non'] 
for x, y in zip(foo, bar): 
    print x + y 

Выход:

HelloBonjour 
YesOui 
NoNon 
+2

+1 за молнии. Если вы используете более старую версию python (<3), следует отметить, что 'itertools.izip()' будет делать это лениво. По умолчанию текущие версии python кажутся ленивыми. – KChaloux

+0

В частности, Python 3.x ленив. Python 2.7 по-прежнему является текущим :) – chepner

0

Zip является то, что поможет вам, когда оба ваши входные списки имеют одинаковый размер. Если списки имеют разный размер, операция будет выполняться только для элементов, имеющих пару в другом списке. Если вы хотите, чтобы заполнить недостающие пары с чем-то вы можете использовать карту:

for i,j in map(None,listA,listB): 
    print i+j 

выход:

HelloBonjour 
YesOui 
NoNon 
+1

'' itertools.izip_longest'' также выполнит эту работу, возможно, с более ясными намерениями. –

0

Вы можете попробовать этот парень:

print '\n'.join(map(lambda x, y: x+y, foo, bar)) 
Смежные вопросы