如何在for循环中获取前一个元素?

29 投票
7 回答
99367 浏览
提问于 2025-04-16 05:57

可能的重复问题:
Python - 在循环中获取前一个和后一个值
python for 循环,如何找到下一个值(对象)?

我有一个包含很多元素的列表,我用一个 for 循环来遍历这个列表。比如说:

li = [2, 31, 321, 41, 3423, 4, 234, 24, 32, 42, 3, 24, 31, 123]

for i in li:
    print(i)

但是我想获取 i 之前的那个元素。我该怎么做呢?

7 个回答

24

通常情况下,你会使用 enumerate() 或者 range() 来遍历列表中的元素。这里有一个使用 zip() 的替代方法。

>>> li = [2, 31, 321, 41, 3423, 4, 234, 24, 32, 42, 3, 24, 31, 123]
>>> list(zip(li[1:], li))
[(31, 2), (321, 31), (41, 321), (3423, 41), (4, 3423), (234, 4), (24, 234), (32, 24), (42, 32), (3, 42), (24, 3), (31, 24), (123, 31)]

每个元组的第二个元素是列表中前一个元素。

27

只需要用 enumerate 来跟踪索引,然后通过索引获取前一个项目。

li = list(range(10))

for i, item in enumerate(li):
    if i > 0:
        print(item, li[i-1])

print("or...")

for i in range(1, len(li)):
    print li[i], li[i-1]

输出:

1 0
2 1
3 2
4 3
5 4
6 5
7 6
8 7
9 8
or...
1 0
2 1
3 2
4 3
5 4
6 5
7 6
8 7
9 8

另一种方法是记住最后一个项目,比如说。

last_item = None
for item in li:
    print(last_item, item)
    last_item = item
43

你可以使用 zip 函数:

for previous, current in zip(li, li[1:]):
    print(previous, current)

或者,如果你想做一些更复杂的事情,因为创建一个列表或者从 li 中切片会比较低效,可以使用 itertools 中的 pairwise 方法

import itertools

def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = itertools.tee(iterable)
    next(b, None)
    return zip(a, b)

for a, b in pairwise(li):
    print(a, b)

撰写回答