Если я сохраню вывод вложенного для l oop, печатаются только последние элементы l oop, но функция печати печатает все комбинации - PullRequest
1 голос
/ 05 мая 2020
l1 = ['a','b']
l2 = ['c','d']
for x in l1:
   for y in l2:
       (a,b)=(x,y)

Когда я print(a,b), все, что я получаю, это ('b','d'), но когда я ввожу код вроде

for x in l1:
   for y in l2:
       print((x,y))

, печатаются все возможные комбинации l1 и l2. Почему это происходит и как go об этом?

Ответы [ 3 ]

1 голос
/ 05 мая 2020

Когда вы выполняете (a,b)=(x,y), он устанавливает значение a равным значению x и b равным значению y. Каждый раз, когда вы пробегаете l oop a и b, вы переезжаете. С другой стороны, оператор print просто записывает в stdout все значения этих двух переменных в данный момент. Если вы хотите сохранить эти значения для использования после l oop, я бы рекомендовал добавить их в список.

l1 = ['a','b']
l2 = ['c','d']

combinations = []
for x in l1:
   for y in l2:
       combinations.append((x, y))

Или, как в ответе Романа Дрындика, вы можете использовать функцию product.

1 голос
/ 05 мая 2020

Простой ответ заключается в том, что когда вы выполняете

l1 = ['a','b']
l2 = ['c','d']
for x in l1:
   for y in l2:
       (a,b)=(x,y)

, я предполагаю, что вы вызываете функцию печати за пределами for l oop (вы не показали, где вы вызывали ее в вставленном коде) . В вашем коде значения a и b переназначаются во время каждой итерации, поэтому, когда вы вызываете его после for l oop, он просто печатает то, чему a и b были присвоены последним.

И когда вы это сделали:

l1 = ['a','b']
l2 = ['c','d']

for (a, b) in product(l1, l2):
    print(a, b)

Вы вызвали функцию печати внутри for l oop. Это означает, что он достигается на каждой итерации, поэтому имеет смысл печатать значения a и b на каждой итерации.

1 голос
/ 05 мая 2020

Следующий код предоставит вам все возможные комбинации

l1 = ['a','b']
l2 = ['c','d']

for x in l1:
   for y in l2:
       (a, b) = (x, y)
       print(a, b)

Также обратите внимание на альтернативное решение

from itertools import product


l1 = ['a','b']
l2 = ['c','d']

for (a, b) in product(l1, l2):
    print(a, b)
...