最近進行一項統計需要窮舉乙個列表元素的所有組合,通過查詢以及自己摸索,總結出了一下三種方法:
方法1:
通過迴圈迭代的方式返回結果
def
powersetsrecursive
(items)
: subsets =
first_elt = items[0]
#first element
rest_list = items[1:
]for partial_sebset in powersetsrecursive(rest_list)
: next_subset = partial_sebset[:]
+[first_elt]
return subsets
方法2:
也是通過迴圈迭代的方式進行列舉,不過**更精煉
def
powersetsrecursive2
(items)
: result =[[
]]for x in items:
result.extend(
[subset +
[x]for subset in result]
)return result
方法3:
通過位運算子的方式,值得好好研究一下
def
powersetsbinary
(items)
: n =
len(items)
for i in
range(2
**n)
: combo =
for j in
range
(n):
if(i >> j )%2
==1: )
print
(combo)
方法4:
我對方法3研究的過程中受到啟發,其實窮舉組合其實就是二進位制每一位0/1組合的過程,所以我自己寫了乙個更容易理解的
n=
len(items)
for i in
range(2
**n)
: aa=
str(
bin(i))[
2:].rjust(4,
'0')
# 轉化為2進製,並補全左側位數
combo=
for j in
range
(len
(aa)):
if aa[j]
=='1':)
print
(combo)
列舉進行位運算 列舉組合z
public enum myenum 用位移運算方便的獲取多個列舉的組合變數 myenum myenum myenum.myenum1 myenum.myenum2 myenum myenum myenum.myenum3 或在組合中刪除其中一項列舉 myenum myenum.myenum1 my...
poj1753解題報告(列舉 組合數)
poj 1753,題目鏈結 有4 4 的正方形,每個格仔要麼是黑色,要麼是白色,當把乙個格仔的顏色改變 黑 白或者白 黑 時,其周圍上下左右 如果存在的話 的格仔的顏色也被反轉,問至少反轉幾個格仔可以使 4 4的正方形變為純白或者純黑?1.每乙個位置只有兩種顏色,翻偶數次等於沒有翻,所以只有翻基數次...
窮舉法解決組合問題
在下面的加法算式中,不同的符號代表不同的數字,相同的符號代表相同的數字。請設計程式求出 都 要 學 c 4個符號分別代表的數字。cpp view plain copy print?h k h j k h i j k h 2 0 0 8 都 要 學 c 4個符號分別代表的數字 從0到 9 然後進行組合...