[英]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.