作者:Python進階者
來源:Python爬蟲與數據挖掘
一、前言偶然的一次機會,在隔壁群看到一個粉絲問了一道Python實現排列組合基礎問題,拿到Python白銀交流群問了一下,下圖是他的需求:
很明顯是個排列組合的問題,直接計算組合結果:C(10,3)=(10×9×8)/(3×2×1)=720/6 =120,答案是120。
二、實現過程這裡【瑜亮老師】直接給了一個代碼,如下所示。
from itertools import combinations
word = ['魯班七号', '魯班', '魯班大師', '甄姬', '安琪拉', '王昭君', '韓信', '孫悟空', '程咬金', '豬八戒']
res = [i for i in combinations(word, 3)]
print(res)
print(len(res))
運行結果如下圖所示:
可以看到運行的結果最後得到的也是120,和手動計算的一緻。
後來【const GF = null】自己也給了一個代碼,如下圖所示:
這個方法也不錯,不過需要提前把排列組合的順序算出來才行。
後來【瑜亮老師】補充了一個方法,代碼如下所示:
word = ['魯班七号', '魯班', '魯班大師', '甄姬', '安琪拉', '王昭君', '韓信', '孫悟空', '程咬金', '豬八戒']
res = [[i, j, k] for i in word[:] for j in word[word.index(i) 1:] for k in word[word.index(j) 1:]]
print(res)
print(len(res))
運行結果如下圖所示:
這個方法是用列表推導式 列表切片 index,也是能實現的,改用range(len)也是一樣的意思,其實就是3層循環,具體的層級如下所示:
res = []
for i in word[:]:
for j in word[word.index(i) 1:]:
for k in word[word.index(j) 1:]:
res.append([i, j, k])
print(res)
運行結果如下圖所示:
總之,完美地解決粉絲的問題啦!
不過話說回來,有現成的模塊,直接用就行了,數據量一旦比較大的話,就難頂了,推薦第一種方法!
三、總結
大家好,我是進階者。這篇文章主要盤點了一個Python實現排列組合的問題,文中針對該問題給出了具體的解析和代碼實現,幫助粉絲順利解決了問題。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!