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链接写的东西飞过我的头脑.
只要投你obj到list:
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你已经使用的简单循环就好了.请记住,简单比复杂更好.
| 归档时间: |
|
| 查看次数: |
234 次 |
| 最近记录: |