我有一個列表的列表,我們可以認爲它是3個球的3個球。itertools和從分區集合中選擇
mylist= [
['HIGH_1', 'MED_1', 'LOW_1'],
['HIGH_2', 'MED_2', 'LOW_2'],
['HIGH_3', 'MED_3', 'LOW_3']
]
我只允許從每個甕中選擇一個球。 我想獲得1球,2球和3球的所有組合。在列表中回答。
爲了實現這一點,我在每個甕
mylist= [
[None, 'HIGH_1', 'MED_1', 'LOW_1'],
[None, 'HIGH_2', 'MED_2', 'LOW_2'],
[None, 'HIGH_3', 'MED_3', 'LOW_3']
]
放置一個假元件(無)現在以下使用itertools的和過濾器獲取我所需的解決方案。
combos = []
for l in itertools.product(*mylist):
combos.append(filter(lambda a: a is not None, l))
combos.remove(()) # remove the empty element
print [list(elem) for elem in combos]
[['HIGH_3'], ['MED_3'], ['LOW_3'], ... , ['MED_2', 'HIGH_3'], ['MED_2', 'MED_3'], ['MED_1', 'HIGH_3'], ..., ['LOW_1', 'LOW_2', 'MED_3'], ['LOW_1', 'LOW_2', 'LOW_3']]
其中產生63個元素。
9(單元素)+ 27(兩個元素)+ 27(三要素)= 63
添加在假無和後過濾不覺得自己做到這一點的最好辦法。
有沒有辦法避免這兩個看似多餘的步驟?
那麼你寫了什麼,究竟是什麼問題呢? – jonrsharpe
你有*「更好」*的標準嗎? – jonrsharpe