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