我有一个字符串列表:
words = ["AAAA", "xyzw", "1234"]
最终目标是生成words
中连接项目所产生的所有排列,即
"AAAAxyzw1234"
"AAAA1234xyzw"
"xyzwAAAA1234"
"xyzw1234AAAA"
"1234AAAAxyzw"
"1234xyzwAAAA"
words
可能是一个很长的列表,每个字符串的长度可能很长。
有没有比下面这种愚蠢的方式更有效的方法呢?我逐个生成每个排列,然后join
它们?
import itertools
def join_perms(words):
for perm in itertools.permutations(words):
yield ''.join(perm)
def main():
words = ["AAAA"*10, "xyzw"*10, "1234"*10] * 3
for result in join_perms(words):
# do something with result
pass
>>> import timeit
>>> timeit.timeit(main, number=100)
10.4355671406
每次追加到words
时,运行时变得异常,因为排列是O(n!)
问题。