【问题标题】:How to generate combinations with only the limited given repeated elements?如何生成仅包含有限给定重复元素的组合?
【发布时间】:2021-08-31 18:23:10
【问题描述】:

给定以下列表:

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

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

我曾尝试使用itertools.combinationsitertools.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],它不应该生成,因为my_list 中只有两个0。

任何线索将不胜感激

【问题讨论】:

  • 我认为itertools.permutations(my_list, 3) 可以满足您的需求。
  • itertools.combindation 正在生成[-1,0,0]。如果您不想在所需的输出中有任何重复,那么您必须过滤掉结果值
  • 但是combinations(my_list, 3) 确实产生(-1, 0, 0)
  • @MichaelSzczesny 你是对的!有效!你怎么知道使用排列而不是组合?我认为顺序对此无关紧要,所以我使用了组合。
  • 准确地说明你想从[-1, 0, 2, 0]得到什么输出。

标签: python python-3.x combinations itertools


【解决方案1】:

[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)

Try it online!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    相关资源
    最近更新 更多