说我有一个字符串列表:
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