【问题标题】:skip first two elements in an enumeration -- python跳过枚举中的前两个元素——python
【发布时间】:2016-04-07 14:24:34
【问题描述】:

这不是我想要的枚举:

>>> seasons = ['Spring', 'summer', 'fall', 'winter']

>>> list(enumerate(seasons, start =2))

[(2, 'Spring'), (3, 'summer'), (4, 'fall'), (5, 'winter')]

这是我想要的枚举功能:

 >>> list(enumerate(seasons, start =2))
[(2, 'fall'), (3, 'winter')]

看出区别了吗? 第一个只是说,“好吧,如果你真的想要我,我会把你的第 0 个元素称为 2”

第二个说,“我知道你只想从第二个索引开始循环,就像 range(2, len(seasons)) 会做的那样”

有没有办法简单地通过枚举来做到这一点?

【问题讨论】:

  • 不,不是枚举,枚举总是为你给它的迭代中的每个项目产生一些东西。

标签: python enumerate


【解决方案1】:

为什么不只对前两个元素进行切片呢?

print(list(enumerate(seasons[2:], start=2)))

输出:

[(2, 'fall'), (3, 'winter')]

了解 enumerate 和 start 发生了什么。尝试迭代它以查看它的输出:

for i, v in enumerate(seasons, start=2):
    print(i, v)

您可以看到您的i,它只是在遍历您的seasons 列表时递增,从2 开始。但列表中的每个值实际上都是从列表的开头开始的。这只是进一步证明start 与列表迭代的实际起点没有任何关系。

【讨论】:

  • 虽然这也是我的第一次尝试并且适用于列表,但它不适用于任何 iterable,即它不适用于不是 subscriptable 的那些。另一方面,@awesoon 的答案实际上适用于任何iterable
【解决方案2】:

您可以使用itertools.islice 来获取可迭代的一部分:

In [9]: from itertools import islice

In [10]: list(islice(enumerate(seasons), 2, None))
Out[10]: [(2, 'fall'), (3, 'winter')]

【讨论】:

  • 这个,谢谢。您的解决方案适用于任何iterable - 老实说,我很惊讶这个问题/答案没有得到更多关注。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-24
  • 2010-10-17
  • 1970-01-01
  • 2012-11-17
  • 2020-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多