问题描述
li = ['a','b','c','d']
在 Python 中使用以下代码,我为列表 li
生成了所有可能的字符组合,并得到了 256 个字符串的结果。
from itertools import product
li = ['a','d']
for comb in product(li,repeat=4):
print(''.join(comb))
比如说,我知道列表li
中字符串的第二个和第四个位置的字符,即'b'和'c'。
所以结果将是一组只有 16 个字符串,即:
abac
abbc
abcc
abdc
bbac
bbbc
bbcc
bbdc
cbac
cbbc
cbcc
cbdc
dbac
dbbc
dbcc
dbdc
如何得到这个结果?有没有 Pythonic 的方法来实现这一点? 谢谢。
编辑:我想要的列表 li
的大小是 a 到 z,repeat
的值为 13。当我尝试上面的代码时,编译器抛出内存错误!
解决方法
from itertools import product
li = ['a','b','c','d']
combs = [list(x) for x in product(li,repeat=4)]
selected_combs = [comb for comb in combs if (comb[1] == 'b' and comb[3] == 'c')]
print(["".join(comb) for comb in selected_combs])
# ['abac','abbc','abcc','abdc','bbac','bbbc','bbcc','bbdc','cbac','cbbc','cbcc','cbdc','dbac','dbbc','dbcc','dbdc']
为了在不需要所有组合 combs
的情况下节省内存,您可以简单地执行以下操作:
li = ['a','d']
selected_combs = [comb for comb in product(li,repeat=4) if (comb[1] == 'b' and comb[3] == 'c')]
print(["".join(comb) for comb in selected_combs])
,
def permute(s):
out = []
if len(s) == 1:
return s
else:
for i,let in enumerate(s):
for perm in permute(s[:i] + s[i+1:]):
out += [let + perm]
return out
per=permute(['a','d'])
print(per)
你想要这个吗?