这是一个例子:
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.deque
与popleft
:
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/