如何将itertools.permutations(“0123456789”)的结果(在python中)转换为字符串列表

时间:2011-03-17 18:58:33

标签: python string list permutation itertools

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

有没有办法将该结果转换为字符串列表,而不会迭代所有3628800个项目?

2 个答案:

答案 0 :(得分:5)

如果你想这样做而不是遍历整个列表而是根据需要懒洋洋地进行,你可以使用itertools.imap

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

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

或者,正如评论中所指出的,一个简单的生成器表达式也适用于此:

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

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

答案 1 :(得分:1)

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

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

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