gfi*_*lds 2 python permutation
我需要生成字符串中所有字符的可能排列(重复).如果字符串是'abc',则输出应为:
aaa aab aac abc ... cbc cca ccb ccc
我不能使用itertools模块,我不想使用递归(因为这只是一个例子.我真正需要的是输出数百万个排列,我害怕内存不足)
我可以这样做:
s = 'abc'
for c1 in range(0, 3):
for c2 in range(0, 3):
for c3 in range(0, 3):
print(s[c1]+s[c2]+s[c3])
Run Code Online (Sandbox Code Playgroud)
基本上,我有多个循环,因为字符串有字符.现在想象一下,如果字符串的长度为10,例如!
有没有更好的方法呢?
解决此问题的一种简单方法是将字符串中的字符视为异常数字系统中的数字.字符串的长度是基数.这样的排列(与重复)'abc'
对应于从数字0
到3**3-1
在底座3,其中,'a'
是数字0
,'b'
是1
和'c'
是2
.
def permutations_with_repetition(s):
base = len(s)
for n in range(base**base):
yield "".join(s[n // base**(base-d-1) % base] for d in range(base))
Run Code Online (Sandbox Code Playgroud)
样品运行:
>>> for p in permutations_with_repetition("abc"):
print(p)
aaa
aab
aac
aba
abb
abc
aca
acb
acc
baa
bab
bac
bba
bbb
bbc
bca
bcb
bcc
caa
cab
cac
cba
cbb
cbc
cca
ccb
ccc
Run Code Online (Sandbox Code Playgroud)
如果你被允许使用itertools
,你需要itertools.product
一个repeat
关键字参数:itertools.product("abc", repeat=3)