在 Python 中以各种可能的方式组合两个字符,而无需将迭代工具组合到一定长度



我想生成具有一定长度的两个字符的所有可能组合的字符串。例如,如果我想生成长度为 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

我仍然缺少bababa组合。如果我在我的幂集函数中输入 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']

最新更新