Getting next element while cycling through a list(循环遍历列表时获取下一个元素)
问题描述
li = [0, 1, 2, 3]
running = True
while running:
for elem in li:
thiselem = elem
nextelem = li[li.index(elem)+1]
When this reaches the last element, an IndexError
is raised (as is the case for any list, tuple, dictionary, or string that is iterated). I actually want at that point for nextelem
to equal li[0]
. My rather cumbersome solution to this was
while running:
for elem in li:
thiselem = elem
nextelem = li[li.index(elem)-len(li)+1] # negative index
Is there a better way of doing this?
After thinking this through carefully, I think this is the best way. It lets you step off in the middle easily without using break
, which I think is important, and it requires minimal computation, so I think it's the fastest. It also doesn't require that li
be a list or tuple. It could be any iterator.
from itertools import cycle
li = [0, 1, 2, 3]
running = True
licycle = cycle(li)
# Prime the pump
nextelem = next(licycle)
while running:
thiselem, nextelem = nextelem, next(licycle)
I'm leaving the other solutions here for posterity.
All of that fancy iterator stuff has its place, but not here. Use the % operator.
li = [0, 1, 2, 3]
running = True
while running:
for idx, elem in enumerate(li):
thiselem = elem
nextelem = li[(idx + 1) % len(li)]
Now, if you intend to infinitely cycle through a list, then just do this:
li = [0, 1, 2, 3]
running = True
idx = 0
while running:
thiselem = li[idx]
idx = (idx + 1) % len(li)
nextelem = li[idx]
I think that's easier to understand than the other solution involving tee
, and probably faster too. If you're sure the list won't change size, you can squirrel away a copy of len(li)
and use that.
This also lets you easily step off the ferris wheel in the middle instead of having to wait for the bucket to come down to the bottom again. The other solutions (including yours) require you check running
in the middle of the for
loop and then break
.
这篇关于循环遍历列表时获取下一个元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:循环遍历列表时获取下一个元素


基础教程推荐
- 何时使用 os.name、sys.platform 或 platform.system? 2022-01-01
- 如何让 python 脚本监听来自另一个脚本的输入 2022-01-01
- 筛选NumPy数组 2022-01-01
- 用于分类数据的跳跃记号标签 2022-01-01
- 如何在海运重新绘制中自定义标题和y标签 2022-01-01
- 线程时出现 msgbox 错误,GUI 块 2022-01-01
- 在 Python 中,如果我在一个“with"中返回.块,文件还会关闭吗? 2022-01-01
- 使用PyInstaller后在Windows中打开可执行文件时出错 2022-01-01
- Python kivy 入口点 inflateRest2 无法定位 libpng16-16.dll 2022-01-01
- Dask.array.套用_沿_轴:由于额外的元素([1]),使用dask.array的每一行作为另一个函数的输入失败 2022-01-01