问题描述
在探索了更多主题之后,我得出了一些结论。
应该有一种-最好只有一种-显而易见的方法
确定哪个选项是“ pythonic”选项时,应考虑一些标准:
- 多么明确
- 简单,
- 和可读性。
在所有条件下赢得的明显“ pythonic”选项是选项3):
列表=列表(my_iterator)
这就是为什么“很明显”没有3)是pythonic的原因:
- 选项3)接近自然语言,使您可以“立即”思考输出的内容。
- 选项2)(使用列表理解),如果您是第一次看到该行代码,将使您阅读更多并更加关注。例如,当我想添加一些额外的步骤(使用迭代元素调用函数或使用if语句进行某些检查)时,我使用列表推导,因此当我看到列表推导时,我会检查内部是否存在任何函数调用或任何其他如果陈述。
-
选项1)(使用*解压缩)如果您不经常使用星号运算符,可能会有些混乱,在Python中有4种情况使用星号:
- 用于乘法和幂运算。
- 用于重复扩展列表类型的容器。
- 用于使用可变参数。(所谓的“包装”)
- 用于打开包装箱。
另一个很好的理由是Python文档本身,我也做了一些统计数据来检查哪些选项是由文档选择,为了这个,我我-
我选择了4
BUIL,从模块的迭代器和一切itertools(即使用这样的:itertools.
)怎么看它们被包装在一个列表中:
- 地图
- 范围
- 过滤
- 枚举
- itertools。
浏览了文档之后,我发现:使用选项1)和2)在列表中解压缩了0个迭代器,使用选项3)解开了35个迭代器。
:
解决方法
我正在尝试找出在列表中解压缩迭代器的pythonic方法。
例如:
my_iterator = zip([1,2,3,4],[1,4])
我提供了以下几种在列表中解压缩迭代器的方法:
1)
my_list = [*my_iterator]
2)
my_list = [e for e in my_iterator]
3)
my_list = list(my_iterator)
No 1)是我最喜欢的方法,因为它减少了代码,但是我想知道这是否也是pythonic方法。或者,也许除了Python
3之外,还有另一种方法可以实现这一目标?