【问题标题】:Testing combinations of varying lengths with no repetition不重复地测试不同长度的组合
【发布时间】:2017-08-26 19:27:50
【问题描述】:

在 python 中,我通过使用多个 for 循环测试了具有固定长度、有重复和不重复的组合。例如,如果我想测试长度为 2 且允许重复的最多 5 个数字的每个组合,我会这样做:

list1=[1,2,3,4,5]
for a in list1:
    for b in list1:
        print(str(a)+','+str(b) )

对于固定长度,这似乎很简单,但在测试所有不同长度时效果不佳。当长度变化时,使用这种策略我必须制作 5 组不同的 1、2、3、4 和 5 循环。这已经非常冗长和丑陋了,但是随着列表大小变得越来越大,它会呈指数级恶化。我正在寻找一种更雄辩、更简单的方法来在 python 中测试所有这些组合。

【问题讨论】:

标签: python python-3.x combinations


【解决方案1】:

您可以循环调用itertools.combinations

import itertools
list1 = [1, 2, 3, 4, 5]

for i in range(1, len(list1)):
     print(list(itertools.combinations(list1, i)))

[(1,), (2,), (3,), (4,), (5,)]
[(1, 2), (1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5), (3, 4), (3, 5), (4, 5)]
[(1, 2, 3), (1, 2, 4), (1, 2, 5), (1, 3, 4), (1, 3, 5), (1, 4, 5), (2, 3, 4), (2, 3, 5), (2, 4, 5), (3, 4, 5)]
[(1, 2, 3, 4), (1, 2, 3, 5), (1, 2, 4, 5), (1, 3, 4, 5), (2, 3, 4, 5)]

如果您的 list1 有重复项,您可以考虑通过转换为 set 并重复该过程来删除它们。

【讨论】:

    猜你喜欢
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 2021-12-27
    • 1970-01-01
    • 2021-04-20
    相关资源
    最近更新 更多