Python中双重嵌套for循环的简洁写法?

18 投票
5 回答
9902 浏览
提问于 2025-04-16 14:35

假设我有一个函数,它接受一个元组参数(x,y),其中x的值在范围X内,y的值在范围Y内。通常我们会这样做:

for x in range(X):
    for y in range(Y):
        function(x,y)

有没有办法做到

for xy in something_like_range(X,Y):
    function(xy)

让xy成为一个元组(x,y)呢?

5 个回答

4

它们是很“Pythonic”的——> (根据你的需求进行修改)

>>> [ (x,y)   for x in range(2)   for y in range(2)]
[(0, 0), (0, 1), (1, 0), (1, 1)]

生成器版本 :

gen = ( (x,y)   for x in range(2)   for y in range(2) )
>>> for x,y in gen:
...     print x,y
... 
0 0
0 1
1 0
1 1
5

你可以使用 itertools.product() 这个功能:

from itertools import product
for xy in product(range(X), range(Y)):
    function(xy)
19

你可以使用 itertools库里的product

>>> from itertools import product
>>> 
>>> for x,y in product(range(3), range(4)):
...   print (x,y)
... 
(0, 0)
(0, 1)
(0, 2)
(0, 3)
(1, 0)
(1, 1)
(1, 2)
(1, 3)

... and so on

你的代码可以写成这样:

for x,y in product(range(X), range(Y)):
    function(x,y)

撰写回答