簡體   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