首页 > 解决方案 > Python如何打印itertools.permutations的属性

问题描述

我是 Python 新手,正在尝试itertools

import itertools as it
obj = it.permutations(range(4))
print(obj)
for perm in obj:
    print( perm )

我的问题:如何在不使用循环的情况下obj 直接查看/打印所有排列?for

我尝试了什么:我尝试按照此SO 链接中的建议 使用__dict__和,但两者都不起作用(前者似乎不存在该对象,而后者生成'TypeError:'itertools.permutations'对象不可调用')。vars

如果我的问题相当愚蠢,请原谅 - 这个属性问题看起来很复杂,而且大部分用SO 链接写的东西都飞到了我的头上。

标签: pythonattributesitertools

解决方案


只需将您投射obj到一个list

print(list(obj))

这将为您提供以下输出:

[(0, 1, 2, 3), (0, 1, 3, 2), (0, 2, 1, 3), (0, 2, 3, 1), (0, 3, 1, 2), (0, 3, 2, 1), (1, 0, 2, 3), (1, 0, 3, 2), (1, 2, 0, 3), (1, 2, 3, 0), (1, 3, 0, 2), (1, 3, 2, 0), (2, 0, 1, 3), (2, 0, 3, 1), (2, 1, 0, 3), (2, 1, 3, 0), (2, 3, 0, 1), (2, 3, 1, 0), (3, 0, 1, 2), (3, 0, 2, 1), (3, 1, 0, 2), (3, 1, 2, 0), (3, 2, 0, 1), (3, 2, 1, 0)]

这就是你问题的直接答案。另一个要弄清楚的好事情是你是否真的需要你所要求的。

permutations你看,返回generator是有原因的。如果您不熟悉该模式,我强烈建议您阅读它。长话短说,通常你不想将这些东西转换为 a list,除非你真的需要它是 a list(例如,你想通过索引直接访问项目)。在您只需要打印排列的情况下,使用循环绝对没有错。for

这是每行打印一个排列的单行:

print('\n'.join(str(permutation) for permutation in obj))

但同样,for您已经使用的简单循环就可以了。请记住,简单胜于复杂


推荐阅读