【问题标题】:Python, all possible combinations of numbers between 2 listsPython,2个列表之间所有可能的数字组合
【发布时间】:2017-04-23 23:42:10
【问题描述】:

我是 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]
...

我希望有更多经验的人对这件事有一些见解。

【问题讨论】:

  • 你能澄清一下“列表中同一位置的数字之间的数字”是什么意思吗?
  • 你需要每个位置之间的数字,还是所有组合?在你的例子中,你需要[0,4,3,5]
  • 那么,在您的示例中,结果将有 4**3 个条目?
  • 这些数字是哥伦布尺子,需要找到完美的尺子,所以我需要检查所有不同的组合。

标签: python list combinations


【解决方案1】:
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 采用 xy 并产生(在这种情况下)[(0, 0), (1, 4), (2, 5)]

for a, b in 获取每一对并将其解压缩为 ab,因此对于第二个 a = 1b = 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))

并产生结果。

【讨论】:

  • 是的,这正是我所需要的。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-17
  • 2019-11-18
  • 2022-01-07
  • 2012-11-02
  • 1970-01-01
  • 2011-12-16
  • 1970-01-01
相关资源
最近更新 更多