5

在 Python 中,我正在使用list(itertools.permutations("0123456789")),并且我正在接收(如预期的那样)单个字符串的元组列表。

有没有办法将该结果转换为字符串列表,而无需遍历所有 3628800 个项目?

4

2 回答 2

5

如果您想在不遍历整个列表的情况下执行此操作,而是根据需要懒惰地执行此操作,您可以使用itertools.imap

itertools.imap(lambda x: "".join(x), itertools.permutations("0123456789"))

(请注意,我没有使用这里list()的结果,permutations所以它尽可能懒惰)

或者,正如评论中所指出的,一个简单的生成器表达式也可以在这里工作:

("".join(x) for x in itertools.permutations("0123456789"))

itertools.imap具有额外的好处是能够使用方便的语法将相同的函数应用于许多可迭代对象(只需将它们添加为后续参数),但这对于这种特殊用法来说不是必需的,因为我们只有一个可迭代对象

于 2011-03-17T19:01:52.683 回答
1

把它变成一个列表会迭代整个事情。您可以将其转换为具有列表理解的列表,这比将其转换为列表然后遍历列表中的所有项目要好:

[''.join(item) for item in itertools.permutations('0123456789')]

如果您不需要以列表结尾,则生成器表达式就足够了(替换[]())。

于 2011-03-17T19:11:30.537 回答