Элемент печати Python в списке дает много результатов

a = [1,2,3]
b = [4,5,6]
#i have 2 lists
for x in a:
 for y in b:
  print x,' vs ',y

Тогда я получил

1 на 4, 1 на 5, 1 на 6, 2 на 4... и так далее

Мне нужно только 3 результата: - 1 против 4 2 против 5 3 против 6

Означает 1-й элемент на a с 1-м элементом на b и 2-й со 2-м и 3-й с 3-м Пожалуйста, помогите мне


person Harry1992    schedule 26.09.2017    source источник


Ответы (6)


Другие ответы в порядке, другой подход будет использовать перечисление.

for i, x in enumerate(a):
    print x," vs ", b[i]

Это создает сжатый список сортов, где каждое значение связано с его значением индекса в списке. Например. enumerate([1, 2, 3]) => [(0, 1), (1, 2), (2, 3)].

person Ben    schedule 26.09.2017
comment
Если список упорядочен, а индекс представляет собой простой счет, это более чистое и более питоническое решение. - person Stuart Buckingham; 26.09.2017

Попробуй это:

a = [1,2,3]
b = [4,5,6]
[print('{0} vs {1}'.format(x,y)) for (x,y) in zip(a, b)]

Zip объединит ваши два списка в ((1, 4), (2, 5), (3, 6))

person Stuart Buckingham    schedule 26.09.2017
comment
Помимо синтаксической ошибки, эта вообще не работает. - person LcdDrm; 26.09.2017

a = [1,2,3]
b = [4,5,6]

for first, second in zip(a,b):
    print(first, ' vs ', second)

zip связывает вместе значения a и b. Таким образом, первый элемент zip(a,b) — это [1,4], следующий элемент — [2,5] и так далее. Обратите внимание, что zip создает итератор, поэтому вы не можете напрямую обращаться к элементам через индекс (zip(a,b)[1] не работает).

person LcdDrm    schedule 26.09.2017
comment
Но братан еще один вопрос: - person Harry1992; 27.09.2017

Попробуй, брат:

x = [1, 2, 3]
y = [4, 5, 6]

for i, j in zip(x, y):
print i + " / " + j

Это даст вам:

1 / 4
2 / 5
3 / 6

Также проверьте: для цикла с двумя переменными?

person Ernestas Sumskas    schedule 26.09.2017

Zip идеально подходит для вашего случая использования.

Подробнее о zip: https://docs.python.org/2/library/functions.html#zip

a = [1,2,3]
b = [4,5,6]
for x in zip(a,b):
    print x[0],' vs ',x[1]

Примечание. Если размер ваших списков отличается, zip останавливается на наименьшем элементе.

person Vinjai    schedule 26.09.2017
comment
Спасибо большое - person Harry1992; 27.09.2017

Спасибо всем, zip(a,b) и enumerate(a,b) работают хорошо, но если у меня есть списки типа a = [1,2,3,4] и b = [1,2,3], то zip(a, б) работает только 1,1 2,2 3,3 а 4й вар не видно и метод enumerate работает хорошо но в итоге выдает ошибку вне диапазона :)

person Harry1992    schedule 27.09.2017