2013-11-23 52 views
1

我試圖讓每個字符串的子集都想不到如何去做。如果任何人都可以幫助我,那會很棒。字符串的子集

>>> string('ab') 
    a, b 
>>> string('abc') 
    a, b, c, ab, ac, bc, 
>>> string('abcd') 
    a, b, c, d, ab, bc, cd, da, abc, bcd, cda, dab, 

這些都必須在列表中,並且字符串中可能有n個字符。該程序應該返回可以形成的所有字符串子集。

回答

1

您可以使用itertools.combinations和列表理解這樣

from itertools import combinations 
def myStrings(s): 
    return ["".join(item) for i in range(1,len(s)) for item in combinations(s,i)] 

print myStrings('ab') 
print myStrings('abc') 
print myStrings('abcd') 

輸出

['a', 'b'] 
['a', 'b', 'c', 'ab', 'ac', 'bc'] 
['a', 'b', 'c', 'd', 'ab', 'ac', 'ad', 'bc', 'bd', 'cd', 'abc', 'abd', 'acd', 'bcd'] 
+0

你的代碼返回每個子集,但你可以刪除不循環的子集,如他們逃脫同樣的符號「 abd'和'acd' – user2954438

+0

沒關係,我找到了一種方法來刪除它們。謝謝 – user2954438