繁体   English   中英

如何获得具有重复值的列表的所有组合

[英]How do I get all combinations of a list with repeating values

我有一个程序需要获取列表中所有可能的项目组合,但到目前为止我发现的并没有给我我需要的东西。 从说[1,2,3]的列表中,我需要 output,

(1)(2)(3)(1,1)(1,2)(1,3)(2,1)(2,2)(2,3)(3,1)(3,2)(3,3)

但是我找到的所有解决方案都给了我一个不重复值的答案,是否有一个库可以为我做到这一点,因为 itertools 没有给我正确的 output。 否则,我会自己做一个 function。

您最初想要的结果只是列表的笛卡尔积本身:

my_list = [1,2,3]
list(itertools.product(my_list, my_list))
#=> [(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]

但是您将其编辑为包括 (1,)、(2,) 和 (3,)。 在这种情况下,您可能会要求使用幂集 - 这是原始所有子集的集合。 您可以使用此问题的答案,但请注意,结果将包括空列表和完整的原始列表。

您可以使用列表理解来做到这一点:

a = [1,2,3]
[(i,j) for i in a for j in a]

您可以使用递归生成器 function:

def combos(d, l, c = []):
  yield tuple(c)
  if len(c) < l:
     yield from [i for b in d for i in combos(d, l, c+[b])]

_, *vals = combos([1,2,3], 2)

Output:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM