python - 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 链接写的东西都飞到了我的头上。
解决方案
只需将您投射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
您已经使用的简单循环就可以了。请记住,简单胜于复杂。
推荐阅读
- c# - http2 请求 docker 容器内存不断增加 - 不释放
- tsql - 将数据从 Azure Blob 存储导入 AzureSQL PaaS 的方法
- python - 我如何让乌龟对象与另一个对象面对相同的方向?
- python - Python regex 提取匹配字符串之间的字符串,包括匹配字符串
- sql - 3 周的移动平均值,从 2 周的周日开始回溯到当前日期
- angular - 在 Firebase 中验证电子邮件地址后将用户添加到数据库集合用户
- python - 如何在 MacOS/tkinter 中抑制默认的“Python”菜单
- git - 是否可以在以前的 git 提交中更改名称,该名称与我想要更改的电子邮件地址相同?
- python - 如何忽略和初始化 state_dict 中的缺失键
- python - 我对 super().__init__() 有点困惑