在Python中嵌套循环中交换循环变量

时间:2017-12-01 00:29:06

标签: python loops swap

假设有2个列表 l1 l2 。我想用 x< = y x y 打印出 x,y 对必须来自 l1 ,另一个必须来自 l2

我编写了以下代码并在Python 3上运行:

l1 = [1, 5, 6]
l2 = [0, 3, 7]
for member_1 in l1:
  for member_2 in l2:
    if member_1 > member_2:
      member_1, member_2 = member_2, member_1
    print(member_1, member_2)

输出非常奇怪:

0 1
0 3
0 7
0 5
0 3
0 7
0 6
0 3
0 7

似乎循环变量不仅仅是存储值。我错过了什么?

3 个答案:

答案 0 :(得分:1)

你改变了member1的值,在外循环的下一次迭代之前它不会回到正确的值

要解决这个问题,你可以(在许多方面):

for member_1 in l1:
  for member_2 in l2:
    print(min(member_1,member_2),max(member_1,member_2))

我之前的回答没有输出OP最初提出的确切结果,它是:

for member_1 in l1:
  for member_2 in l2:
    print(sorted([member_1,member_2]))

答案 1 :(得分:0)

l1 = [1, 5, 6]
l2 = [0, 3, 7]

for i in l1:
    for j in l2:

        if(i<=j):
            print(i,j)

for j in l2:
    for i in l1:

        if(j<=i):
            print(j, i)

产量

1 3
1 7
5 7
6 7
0 1
0 5
0 6
3 5
3 6

这是你要打印的吗?

答案 2 :(得分:0)

使用itertools.product()

import itertools

l1 = [1, 5, 6]
l2 = [0, 3, 7]

print([sorted(tup) for tup in itertools.product(l1, l2)])
# [[0, 1], [1, 3], [1, 7], [0, 5], [3, 5], [5, 7], [0, 6], [3, 6], [6, 7]]