繁体   English   中英

Python如何为itertools.permutations打印属性

[英]Python how to print attributes for itertools.permutations

我是Python的新手,正在尝试itertools

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

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

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

如果我的问题有点笨拙,请原谅-这个属性问题看起来很复杂,用SO链接编写的大部分内容都扑朔迷离。

只需将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返回生成器是有原因的。 如果您不熟悉这种模式,强烈建议您阅读一下。 长话短说,除非您确实需要将其作为list (例如,您想直接通过索引访问项目),否则通常不需要将此类内容投射到list 在只需要打印排列的情况下,使用for循环绝对没有错。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM