首页 > 解决方案 > 迭代器相当于python中的切片?

问题描述

获得此切片的迭代器等效项的惯用且有效的方法是什么?

obj[start:stop:step]

功能上等同于(我认为)这样的东西:

def iter_slice(obj, start, stop, step=None):
        
    length = len(obj)

    range_step = 1 if step is None else step
    
    range_start = ((0 if range_step > 0 else length - 1) if start is None
                   else start if start >= 0
                   else max(length + start, 0))

    range_stop = ((length if range_step > 0 else -1) if stop is None
                  else min(stop, length) if stop >= 0
                  else length + stop)

    for i in range(range_start, range_stop, range_step):
        yield obj[i]

我想知道是否有一种方法可以利用 Python 的内置切片功能或某些库函数,而不必尝试显式处理所有情况(正如我在上面尝试过的那样,无论是否正确)。

这里有一些讨论,但答案都涉及以下之一:

有没有一种简洁的方法可以避免这些问题?

标签: pythoniteratorslice

解决方案


推荐阅读