python - 从某个索引开始迭代列表

标签 python arrays list iterator iteration

这是一个例子:

list_ = [5, 'cat', 0xDEADBEEF, 4.0]

for offset in range(len(list_)):
    result = 0
    for elem in list_[offset:]:
        result = func(result, elem)
    return result

其中 func 是不可交换的。

在上面的代码中,list_[offset:] 将创建一个新列表,但我需要的只是 list_ 的 View 。我该如何优化它?

最佳答案

要复制切片,但每次迭代的时间为 O(1),您可以使用 collections.dequepopleft:

from collections import deque

dq = deque(list_)

for i in range(len(dq)):
    print(dq)
    dq.popleft()

结果:

deque([5, 'cat', 3735928559, 4.0])
deque(['cat', 3735928559, 4.0])
deque([3735928559, 4.0])
deque([4.0])

这应该比列表切片更有效:请参阅 deque.popleft() and list.pop(0). Is there performance difference? 。另请注意,列表切片工作时间为 O(k),其中 k 是切片的长度。

关于python - 从某个索引开始迭代列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53953360/

相关文章:

Python - 如何按照指定的属性顺序对对象数组进行双重排序?

python - 从 Mako 模板输出中去除空格 (Pylons)

python - 为python写入Redis中的几个数据库

python - Selenium 加载,但不打印所有 HTML

Java 数组通过比较器排序

c++ - 使用带对象的数组调用类中的方法,错误 "non-class type",c++

r - 将列表中多个矩阵的上三角复制到下三角

python - 使用 pandas 在多列中应用 IF 条件

php - 使用PHP计算字符串中的五个逗号后,将字符串转换为数组

list - 我的函数中的 Haskell 语法错误