[英]Listing all possible combinations
我想知道您是否可以幫我解決這個問題。
我有以下代碼代表數字范圍的所有可能組合:
import itertools
lst = [1, 2, 3]
combs = []
for i in xrange(1, len(lst)+1):
els = [list(x) for x in itertools.combinations(lst, i)]
combs.extend(els)
問題是它以以下形式表示輸出
[[1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3]]
對我來說,將每個組合表示在單獨的文本文件中將是非常有益的。 每個文本文件在一行中代表組合中的每個數字。 與(1,2)一樣,1位於第一行,2位於秒行,沒有逗號。
衷心感謝您對我的幫助。
感謝數以百萬計的人的幫助。 感謝它。
我還有一個小問題要解決。
對於Poke解決方案,這很好,這是一個小問題(我在說明問題時的錯誤)
該文件的輸出為:
[[1], [2], [3]]
[[1, 2], [1, 3], [2, 3]]
[[1, 2, 3]]
事情是我需要使用代碼的大數目的組合(6-39)。
你能幫我嗎? 即使自己編輯提供的代碼?
預先感謝一百萬
您的問題與實際生成組合完全不同。 您想要的只是一種輸出數據的特殊方式。 使用標准的文件編寫工具,您可以輕松地做到這一點:
>>> combinations = [[1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3]]
>>> for i, combination in enumerate(combinations):
with open(r'C:\Users\poke\Desktop\foobar\{0}.txt'.format(i), 'w+') as f:
for value in combination:
f.write(str(value) + '\n')
import itertools
def savecomb(a, basename):
k = 0
for n in range(1, len(a) + 1):
for c in itertools.combinations(a, n):
k += 1
f = open("{}{}.txt".format(basename, k), "wt")
for i in c:
f.write("{}\n".format(i))
f.close()
還有另一種使用powerset的解決方案,該解決方案未在itertools中定義,但在此處進行了描述(請在頁面中查找powerset ):
def powerset(iterable):
s = list(iterable)
return itertools.chain.from_iterable(itertools.combinations(s, r) for r in range(len(s)+1))
def savecomb(a, basename):
for k, c in enumerate(powerset(a)):
with open("{}{}.txt".format(basename, k), "wt") as f:
for i in c:
f.write("{}\n".format(i))
之所以可行,是因為采用所有大小的組合與采用列表的所有子集是完全一樣的。 將有一個空文件,占空子集。
另外,請記住,有2 ^ n個子集,其中n是列表的大小,因此即使n不太大,也會有很多文件。 在這種情況下,即使磁盤空間是足夠大的,有可能是其不喜歡在一個目錄有太多的文件的文件系統有問題。 因此,將它們放在不同的目錄中(明智的做法是稍微修改一下代碼)可能是明智的選擇,或者最好使用另一種方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.