Python:连接字符串列表的排列的有效方法

时间:2016-10-16 20:54:25

标签: python string permutation

我有一个字符串列表:

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!)问题。

0 个答案:

没有答案