如何从可迭代的保留原始索引中枚举所选元素?

ele*_*ent 4 python generator enumerate python-3.x

我遇到了选定元素上使用枚举器形成可迭代(即序列迭代器或类似物)的情况,并希望返回原始索引而不是默认索引count,从 开始0一直到len(iterable) - 1.

一种非常幼稚的方法是声明一个名为的新生成器对象_enumerate()

>>> def _enumerate(iterable, offset = 0, step = 1):
    index = offset
    for element in iterable:
        yield index, element
        index += step
Run Code Online (Sandbox Code Playgroud)

...一个新的列表对象months

>>> months = ["January", "February", "March", "April", "May", "June",
              "July", "August", "September", "October", "November", "December"]
Run Code Online (Sandbox Code Playgroud)

使用蟒蛇在积聚enumerate功能会产生这种输出[5::2]切片:

>>> for index, element in enumerate(months[5::2]):
    print(index, element)


    0 June
    1 August
    2 October
    3 December
Run Code Online (Sandbox Code Playgroud)

我们自己的枚举器预期输出 _enumerate再次用于[5::2]切片:

>>> for index, element in _enumerate(months[5::2], offset = 5, step = 2):
    print(index, element)


    5 June
    7 August
    9 October
    11 December
Run Code Online (Sandbox Code Playgroud)

你知道更好,更pythonic和更易读的解决方案吗?:)

swe*_*zel 6

这是我的评论作为答案;)

months = ["January", "February", "March", "April", "May", "June",
          "July", "August", "September", "October", "November", "December"]

offset = 5
step = 2
for index, element in enumerate(months[offset::step]):

    # recalculate original index
    index = offset + index*step

    # actually repetition of the month is trivial,
    # but I put it just to show that the index is right
    print(index, element, months[index])
Run Code Online (Sandbox Code Playgroud)

印刷:

5 June June
7 August August
9 October October
11 December December
Run Code Online (Sandbox Code Playgroud)