生成字符串中所有可能的字符组合

说我有一个字符串列表:

li = ['a', 'b', 'c']

我想构造一个新列表,以使新列表的每个条目都是原始列表中3个条目的选择的串联.请注意,可以重复选择每个条目:

new_li=['abc', 'acb', 'bac', 'bca', 'cab', 'cba', 'aab', 'aac',....'aaa', 'bbb', 'ccc']

残酷的方法是构造一个3折嵌套的for循环,并将每个3组合插入到新列表中.我想知道是否有任何Python方式可以解决这个问题?谢谢.

更新:
稍后,我会将新列表转换为集合,因此顺序无所谓.

解决方法:

这看起来像是itertools.product的工作.

import itertools

def foo(l):
     yield from itertools.product(*([l] * 3)) 

for x in foo('abc'):
     print(''.join(x))

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

yield from在python3.3及更高版本中可用.对于较旧的版本,请在循环内产生:

def foo(l):
     for i in itertools.product(*([l] * 3)) :
         yield i
上一篇:python – 使用多处理的并行计算combination_with_replacement


下一篇:python – 检查两个嵌套列表在替换时是否相同