枚举中如何跳过前两个元素 -- Python

5

这不是我想从枚举中得到的:

>>> 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))一样”

使用enumerate难道没有简单的方法吗?


不行,不能使用enumerate,因为enumerate总是会为你提供可迭代对象中的每个项目。 - RemcoGerlich
2个回答

14

为什么不只是切割前两个元素呢?

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与列表迭代的实际起始点没有任何关系。


虽然这是我第一次尝试,而且适用于列表,但它不适用于任何“可迭代”对象,即不适用于那些不可“下标化”的对象。另一方面,@awesoon的答案实际上适用于任何“可迭代”对象。 - penelope

10
你可以使用 itertools.islice 来获取可迭代对象的切片:
In [9]: from itertools import islice

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

2
这个,谢谢。你的解决方案适用于任何“可迭代对象”,而且我很惊讶这个问题/答案没有得到更多的关注。 - penelope

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接