itertools.permutations() 为什么返回一个列表而不是字符串?

35
为什么itertools.permutations()返回每个排列的字符或数字列表,而不是直接返回一个字符串?
例如:
>>> print([x for x in itertools.permutations('1234')])
>>> [('1', '2', '3', '4'), ('1', '2', '4', '3'), ('1', '3', '2', '4') ... ]

为什么它不返回这个值?

>>> ['1234', '1243', '1324' ... ]
4个回答

54

itertools.permutations() 的工作方式很简单。它将任意可迭代对象作为参数,始终返回一个生成元组的迭代器。它不会(也不应该)特殊处理字符串。要获取字符串列表,您可以自己连接元组:

list(map("".join, itertools.permutations('1234')))

4
如果不是列表推导、生成器表达式或其他方法,为什么要使用 map 而不是它们? - Jakob Bowyer
我认为 map("".join, itertools.permutations('1234')) 就足够了。加上 list() 没有任何区别。 - Bill Cheng
3
在Python 2中,map()的结果已经是一个列表,这是正确的,但是这个问题是关于Python 3的。在大多数情况下,你应该能够使用Python 3中map()返回的生成器对象,但为了更方便的测试,我添加了显式转换成列表的代码。 - Sven Marnach

16

3

排列可以针对字符串和列表进行操作,下面是一个示例..

x = [1,2,3]

如果你需要对上述列表进行排列

print(list(itertools.permutations(x, 2)))

# the above code will give the below..
# [(1,2),(1,3),(2,1)(2,3),(3,1),(3,2)]

2

我没有尝试过,但很可能会成功。

comb = itertools.permutations("1234",4)
for x in comb: 
  ''.join(x)    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接