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