我有一個可迭代對象的列表,我有興趣獲得由每個迭代組成的0或1個項目的所有列表(順序不重要,所以它的組合不是排列組合我尋求)。優雅的方式來獲得迭代列表的組合
我有一個非常不雅的實現,我已經在下面發佈。
我相信有一種更優雅的方式來做到這一點,可能與itertools
模塊,但我不能拿出任何東西。有什麼建議?
import itertools
def all_subsets(ss):
subset_lens = range(0, len(ss) + 1)
list_of_subsets = map(lambda n: itertools.combinations(ss, n), subset_lens)
return itertools.chain.from_iterable(list_of_subsets)
list_of_iterables = [["A1"], ["B1", "B2", "B3"], ["C1", "C2"]]
all_possibilities = itertools.chain.from_iterable(itertools.product(*subset)
for subset in all_subsets(list_of_iterables))
# Visual representation of the desired result
for eg in all_possibilities:
print eg
結果:
()
('A1',)
('B1',)
('B2',)
('B3',)
('C1',)
('C2',)
('A1', 'B1')
('A1', 'B2')
('A1', 'B3')
('A1', 'C1')
...
你只是對顯示結果感興趣,或者你還想要組合存儲嗎? – 2013-03-07 20:57:53
@埃德加,我會做的事情超出了這個問題的範圍,所以我需要存儲,而不是打印。視覺表示只是爲了幫助解釋我的問題! – 2013-03-07 21:04:32