我想生成具有一定长度的两个字符的所有可能组合的字符串。例如,如果我想生成长度为 3 的所有字符串,字符'a'
和'b'
我想要下一个输出(不在列表中(:
aaa
aab
aba
baa
bbb
bba
abb
bbb
我定义了两个函数:
def replace(string,char):
y = string[1]
for i in range(1,len(string)):
string = string[:i].replace(y,char) + string[i:]
print(string)
def powerset(char1,char2,longitud):
"""FUnction to get all the combinations
of two characters of a certain length """
x = char1*longitud
print (x)
replace(x, char2)
y = char2* longitud
replace(y, char1)
print (y)
如果我以 3 的长度运行代码,我只得到 8 种组合中的 6 种:
powerset('a','b',3)
aaa
baa
bba
abb
aab
bbb
我仍然缺少bab
和aba
组合。如果我在我的幂集函数中输入 4,我会得到 16 种可能组合中的 8 种。应该有一种最简单的方法来解决问题,但我被困住了。你有什么想法吗?
简单的递归生成器函数:
def combos(chars, length):
if length == 0:
yield ''
return
for char in chars:
for combo in combos(chars, length-1):
yield char + combo
>>> list(combos('ab', 3))
['aaa', 'aab', 'aba', 'abb', 'baa', 'bab', 'bba', 'bbb']