簡體   English   中英

Python 或數學:如何計算列表元素的所有可能組合?

[英]Python or math: How to count all possible combinations of a list's elements?

假設有一個列表[1,2,3,4,5] ,我需要獲取元素(或“子列表”)所有可能組合的計數,例如1, 2, 3, 4, 5, 12, 13, 14, ..., 123, 124, ..., 12345

我知道如何獲取nCr ,即列表中r元素的組合計數,共有n元素。
Python 3.8或以上:

from math import comb
p, r = 5, 2
print(comb(p, r))

然后我可以做nC1 + nC2 +...+ nCn 但是有更好/更快的方法嗎?

p, result = 5, 0
for r in range(1, 6):
    result += comb(p, r)
print(result)

非常感謝您的回答。

這個概念在數學上叫做冪集,指的是給定集合的所有子集。 您的問題涉及冪集的大小,即2^n ,其中n是原始集合的大小。 這個總數包括空集,所以正如 C4stor 所說,你的總數是2^n - 1

如果輸入具有所有唯一元素,則上述答案有效。 如果有重復的元素,則取每個元素的 (count + 1) 的乘積,並在末尾再次減一以刪除空集。

例如 [1,1,1,2,2,3]:我們的計數是 3、2、1,所以我們的答案是 4 * 3 * 2 - 1 = 23。

這個想法是,對於每個元素,您的子列表中可以有從 0 到 count(element) 的任何地方。

這個特定的總和等於2^n -1 :-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM