python - 循环遍历列表时获取下一个元素

标签 python list iteration next

li = [0, 1, 2, 3]

running = True
while running:
    for elem in li:
        thiselem = elem
        nextelem = li[li.index(elem)+1]

当它到达最后一个元素时,会引发 IndexError(对于任何迭代的列表、元组、字典或字符串都是如此)。我实际上希望 nextelem 等于 li[0]。我对此相当麻烦的解决方案是

while running:
    for elem in li:
        thiselem = elem
        nextelem = li[li.index(elem)-len(li)+1]   # negative index

有更好的方法吗?

最佳答案

仔细考虑后,我认为这是最好的方法。它可以让你在不使用我认为很重要的 break 的情况下轻松进入中间,并且它需要最少的计算,所以我认为它是最快的。它也不需要 li 是一个列表或元组。它可以是任何迭代器。

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)

我将这里的其他解决方案留给后代。

所有那些花哨的迭代器东西都有它的位置,但不是在这里。使用 % 运算符。

li = [0, 1, 2, 3]

running = True
while running:
    for idx, elem in enumerate(li):
        thiselem = elem
        nextelem = li[(idx + 1) % len(li)]

现在,如果您打算在列表中无限循环,那么只需这样做:

li = [0, 1, 2, 3]

running = True
idx = 0
while running:
    thiselem = li[idx]
    idx = (idx + 1) % len(li)
    nextelem = li[idx]

我认为这比涉及 tee 的其他解决方案更容易理解,而且可能也更快。如果您确定列表不会改变大小,您可以保存一份 len(li) 的副本并使用它。

这也让您可以轻松地从中间走下摩天轮,而不必等待水桶再次落到底部。其他解决方案(包括您的)要求您在 for 循环中间检查 running,然后检查 break

关于python - 循环遍历列表时获取下一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2167868/

相关文章:

python - 有哪些使用有限元求解结构二维和三维框架的 Python 库?

python - 使用 pyparsing 分析时如何使两个语法等效部分的第一部分可选

python - 打印解压缩的列表对象返回空列表

vector - 迭代过程中如何转移所有权?

Python-在找不到时更改字典键

python - 计算 numpy 数组成对的欧几里德距离,除了 self

删除数据框列表中的部分列名称 - R

java - 无法访问列表 : "expression must be an array type" 中的元素

r - 使用 R 查找总和为给定值的元素

python - 如何检测 Blobstore 条目是否是图像,以便 get_serving_url 可以工作?