Python如何打印itertools.permutations的属性

Nov*_*rog 1 python attributes python-itertools

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

import itertools as it
obj = it.permutations(range(4))
print(obj)
for perm in obj:
    print( perm )
Run Code Online (Sandbox Code Playgroud)

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

我尝试了什么: 我尝试使用__dict__vars在这个SO链接中建议,但两个都不起作用(前者似乎不存在对象,而后者生成'TypeError:'itertools.permutations'对象不可调用').

请原谅,如果我的问题相当无趣 - 这个属性问题看起来很复杂,大部分用SO链接写的东西飞过我的头脑.

Ern*_*Ten 5

只要投你objlist:

print(list(obj))
Run Code Online (Sandbox Code Playgroud)

这将为您提供以下输出:

[(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)]
Run Code Online (Sandbox Code Playgroud)

这是你问题的直接答案.要弄明白的另一个好处是你是否真的需要你所要求的.

你知道,permutations返回发电机有一个原因.如果你不熟悉这种模式,我强烈建议阅读它.总而言之,一般来说,list除非你真的需要将它作为一个list(例如你想通过索引直接访问项目),否则你不希望将这些东西转换为a .在您只需要打印排列的情况下,使用循环绝对没有问题for.

这是一行代码,每行打印一个排列:

print('\n'.join(str(permutation) for permutation in obj))
Run Code Online (Sandbox Code Playgroud)

但是,for你已经使用的简单循环就好了.请记住,简单比复杂更好.