如何将itertools.permutations("0123456789")的结果转为字符串列表
在Python中,我使用了 list(itertools.permutations("0123456789"))
,结果得到了一个包含单个字符字符串的元组列表,这个结果是我预期的。
有没有办法把这个结果变成一个字符串列表,而不需要遍历所有的3628800个项目呢?
2 个回答
1
把它变成一个列表会遍历整个内容。你可以用一种叫做列表推导的方法把它变成列表,这样比先变成列表再一个个遍历要好。
[''.join(item) for item in itertools.permutations('0123456789')]
如果你最后不需要得到一个列表,那么用生成器表达式就可以了(把[]
换成()
就行)。
5
如果你想要在不遍历整个列表的情况下,按需处理数据,可以使用 itertools.imap
:
itertools.imap(lambda x: "".join(x), itertools.permutations("0123456789"))
(注意,我没有对 permutations
的结果使用 list()
,这样可以尽量延迟处理)
或者,正如评论中提到的,简单的生成器表达式也可以在这里使用:
("".join(x) for x in itertools.permutations("0123456789"))
itertools.imap
还有一个额外的好处,就是可以方便地对多个可迭代对象应用同一个函数(只需把它们作为后续参数添加),但在这个特定的用法中并不需要,因为我们这里只有一个可迭代对象