小编典典

在列表中解压缩迭代器的Python方法

python

我正在尝试找出在列表中解压缩迭代器的pythonic方法。

例如:

my_iterator = zip([1, 2, 3, 4], [1, 2, 3, 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之外,还有另一种方法可以实现这一目标?


阅读 222

收藏
2021-01-20

共1个答案

小编典典

在探索了更多主题之后,我得出了一些结论。

应该有一种-最好只有一种-显而易见的方法

禅宗的python

确定哪个选项是“ pythonic”选项时,应考虑一些标准:

  • 多么明确
  • 简单,
  • 和可读性。

在所有条件下赢得的明显“ pythonic”选项是选项3):

列表=列表(my_iterator)

这就是为什么“很明显”没有3)是pythonic的原因:

  • 选项3)接近自然语言,使您可以“立即”思考输出的内容。
  • 选项2)(使用列表理解),如果您是第一次看到该行代码,将使您阅读更多并更加关注。例如,当我想添加一些额外的步骤(使用迭代元素调用函数或使用if语句进行某些检查)时,我使用列表推导,因此当我看到列表推导时,我会检查内部是否存在任何函数调用或任何其他如果陈述。
  • 选项1)(使用*解压缩)如果您不经常使用星号运算符,可能会有些混乱,在Python中4种情况使用星号

    1. 用于乘法和幂运算。
    2. 用于重复扩展列表类型的容器。
    3. 用于使用可变参数。(所谓的“包装”)
    4. 用于打开包装箱。

另一个很好的理由是Python文档本身,我也做了一些统计数据来检查哪些选项是由文档选择,为了这个,我我-
我选择了4
BUIL,从模块的迭代器和一切itertools(即使用这样的:itertools.)怎么看它们被包装在一个列表中:

  • 地图
  • 范围
  • 过滤
  • 枚举
  • itertools。

浏览了文档之后,我发现:使用选项1)和2)在列表中解压缩了0个迭代器,使用选项3)解开了35个迭代器。

在此处输入图片说明

结论

在列表中解压缩迭代器的pythonic方法是: my_list = list(my_iterator)

2021-01-20