首页 > 解决方案 > 如何生成仅包含有限给定重复元素的组合?

问题描述

给定以下列表:

my_list = [-1, 0, 2, 0]

我怎样才能得到所有的三元组组合?例如[[-1, 0, 2], [-1, 0, 0], [0, 2, 0], ...]

我尝试过使用itertools.combinationsanditertools.combinations_with_replacement函数,但它们都没有做我想做的事。

first = itertools.combinations(my_list, 3)

second = itertools.combinations_with_replacement(my_list, 3)

我将两个变量的第二个参数设置为 3,因为我想要三胞胎。但是,first上面的变量(使用itertools.combinations)不允许任何重复的元素,因此[-1, 0, 0]不会生成所需的三元组之一。

然后,second一个(使用itertools.combinations_with_replacement)重复太多。也就是说,生成的元素之一是[0, 0, 0]不应该生成的,因为 中只有两个 0 my_list

任何线索将不胜感激

标签: pythonpython-3.xcombinationsitertools

解决方案


[ itertools.combinations] 不允许任何重复的元素

是的,但两个零是独立的元素。

简单地测试它表明(-1, 0, 0) 存在

import itertools

my_list = [-1, 0, 2, 0]

first = itertools.combinations(my_list, 3)
print((-1, 0, 0) in first)

first = itertools.combinations(my_list, 3)
print(*first)

输出:

True
(-1, 0, 2) (-1, 0, 0) (-1, 2, 0) (0, 2, 0)

在线尝试!


推荐阅读