Python-在多个列表的所有实例上循环
在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标志来打破顶层循环。到目前为止
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==
?在您的案例中,
和
是什么?我最喜欢这个答案,因为它以最直接的方式给出了解决方案。不过,我也喜欢那些建议使用函数的答案。他们坚持单一责任原则,解决了问题。也许两者的结合是最好的解决方案……我最喜欢这个答案,因为它以最直接的方式给出了解决方案。不过,我也喜欢那些建议使用函数的答案。他们坚持单一责任原则,解决了问题。也许两者的结合是最好的解决方案。。。