2

我是 python 新手,我想要一些关于我遇到的问题的指导。

假设您有两个列表,长度相同且填充了数字:

x=[0,1,2,3]
y=[0,4,5,6]

Python如何计算列表中同一位置的数字之间的数字?所以对于这个例子。

[0,1,2,3]
[0,2,2,3]
[0,3,2,3]
[0,4,2,3]
[0,1,3,3]
...

我希望有更多经验的人对这个问题有一些见解。

4

1 回答 1

7
x=[0,1,2]
y=[0,4,5]

from itertools import product

for lst in product(*(range(a, b+1) for a, b in zip(x, y))):
    print(lst)
#>>> (0, 1, 2)
#>>> (0, 1, 3)
#>>> (0, 1, 4)
#>>> (0, 1, 5)
#>>> (0, 2, 2)
#>>> (0, 2, 3)
#>>> (0, 2, 4)
#>>> (0, 2, 5)
#>>> (0, 3, 2)
#>>> (0, 3, 3)
#>>> (0, 3, 4)
#>>> (0, 3, 5)
#>>> (0, 4, 2)
#>>> (0, 4, 3)
#>>> (0, 4, 4)
#>>> (0, 4, 5)

zip接受xandy并产生 (在这种情况下) [(0, 0), (1, 4), (2, 5)]

获取每一对并将其for a, b in解压缩到aandb中,因此对于第二个a = 1and b = 4

然后range为每个制作一个。这是range(a, b+1)因为范围中的最后一项被删除了。

然后你有一个可迭代的范围:

[ range(0, 1), range(1, 5), range(2, 6) ]

product接受一些可迭代对象并对所有可能的组合进行迭代。所以你用“*”操作符“解包”迭代,所以product被称为

product(*[ range(0, 1), range(1, 5), range(2, 6) ])

这相当于

product(range(0, 1), range(1, 5), range(2, 6))

并产生结果。

于 2013-09-28T22:23:49.920 回答