Python-在多个列表的所有实例上循环

Python-在多个列表的所有实例上循环,python,Python,在Python中,有没有更好的方法来循环多个列表的每个组合?例如 list1 = [1,2,3,4] list2 = [6,7,8] for i in list1: for j in list2: print(str(i) + ", " + str(j)) 1, 6 1, 7 1, 8 2, 6 2, 7 2, 8 3, 6 3, 7 3, 8 4, 6 4, 7 4, 8 我这样问是因为一旦找到一个值,我想打破这两个循环。我不想使用bool标志来打破顶层循环。到目前为止

在Python中,有没有更好的方法来循环多个列表的每个组合?例如

list1 = [1,2,3,4]
list2 = [6,7,8]

for i in list1:
   for j in list2:
      print(str(i) + ", " + str(j))

1, 6
1, 7
1, 8
2, 6
2, 7
2, 8
3, 6
3, 7
3, 8
4, 6
4, 7
4, 8
我这样问是因为一旦找到一个值,我想打破这两个循环。我不想使用bool标志来打破顶层循环。到目前为止,我看到的所有答案都说使用zip,但这不是一回事。zip将产生以下结果

1, 6
2, 7
3, 8
如果你使用地图,你会得到以下,这也是不是我要找的

1, 6
2, 7
3, 8
4, None

您可以使用
产品
功能

你可以在网上阅读更多

大致相当于生成器表达式中的嵌套for循环


您可以使用
产品
功能

你可以在网上阅读更多

大致相当于生成器表达式中的嵌套for循环

您可以这样使用:


itertools.product
返回一个生成器,其中包含两个列表的所有可能排列。然后,您只需对其进行迭代,并进行搜索,直到找到所需的值。

您可以这样使用:


itertools.product
返回一个生成器,其中包含两个列表的所有可能排列。然后,您只需迭代这些内容,并进行搜索,直到找到所需的值。

您是否尝试过使用列表理解

[(x, y) for x in [1,2,3,4]
 for y in [6,7,8]]

你试过使用列表理解吗

[(x, y) for x in [1,2,3,4]
 for y in [6,7,8]]

如果您不想按照另一个答案中的建议使用
itertools.product
,可以将其包装在函数中并返回:

list1 = [1,2,3,4]
list2 = [6,7,8]

def findNumbers(x, y):
    for i in list1:
       for j in list2:
          print(str(i) + ", " + str(j))
          if (x, y) == (i, j):
              return (x, y)
输出:

>>> findNumbers(2, 7)
1, 6
1, 7
1, 8
2, 6
2, 7
(2, 7)

如果您不想按照另一个答案中的建议使用
itertools.product
,可以将其包装在函数中并返回:

list1 = [1,2,3,4]
list2 = [6,7,8]

def findNumbers(x, y):
    for i in list1:
       for j in list2:
          print(str(i) + ", " + str(j))
          if (x, y) == (i, j):
              return (x, y)
输出:

>>> findNumbers(2, 7)
1, 6
1, 7
1, 8
2, 6
2, 7
(2, 7)

您可能希望看到在简单代码中使用
产品

  • 在这种情况下,
    product
    是一个迭代器,它一次返回
    list1
    list2
    的叉积元素
  • for
    -循环中,我们观察某一对的出现,并且
    在遇到它时将其从循环中断开
--


您可能希望看到在简单代码中使用
产品

  • 在这种情况下,
    product
    是一个迭代器,它一次返回
    list1
    list2
    的叉积元素
  • for
    -循环中,我们观察某一对的出现,并且
    在遇到它时将其从循环中断开
--


如果需要知道中断条件出现时在扫描中的位置,可以同时使用列表理解和
枚举

for i,a,j,b in [ x+y for x in enumerate([11,12,13,14]) for y in enumerate([16,17,18]) ]:
    print( i,a,j,b)
    if a==13 and b==17: break
print(i,j) # get 2 1

如果需要知道中断条件出现时在扫描中的位置,可以同时使用列表理解和
枚举

for i,a,j,b in [ x+y for x in enumerate([11,12,13,14]) for y in enumerate([16,17,18]) ]:
    print( i,a,j,b)
    if a==13 and b==17: break
print(i,j) # get 2 1

看一看
itertools.product
您想要的价值是什么?像
i==
j==
?您的案例中的
是什么?请看一看
itertools.product
您想要的价值是什么?像
i==
j==
?在您的案例中,
是什么?我最喜欢这个答案,因为它以最直接的方式给出了解决方案。不过,我也喜欢那些建议使用函数的答案。他们坚持单一责任原则,解决了问题。也许两者的结合是最好的解决方案……我最喜欢这个答案,因为它以最直接的方式给出了解决方案。不过,我也喜欢那些建议使用函数的答案。他们坚持单一责任原则,解决了问题。也许两者的结合是最好的解决方案。。。