Python列表:如何在使用for循环时读取前一个元素?

use*_*652 6 python for-loop list

可能重复:
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
Run Code Online (Sandbox Code Playgroud)

但是我想得到i的前一个元素,如何实现呢?

我不必使用for循环,所以请随意更改任何内容.谢谢!

gho*_*g74 19

通常,您使用enumeraterange()浏览元素.这是另一种选择

>>> li = [2,31,321,41,3423,4,234,24,32,42,3,24,31,123]
>>> 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)]
Run Code Online (Sandbox Code Playgroud)

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

  • 是的,这确实有效,但如果你的列表真的很大,你真的想要创造第二个非常大的列表(使用`li [1:]`)的性能影响吗? (2认同)

Sin*_*ion 15

你可以使用zip:

for a, b in zip(li, li[1:]):
  print a, b
Run Code Online (Sandbox Code Playgroud)

或者,如果你需要做一些有点发烧友的事情,因为创建一个列表或者拿一片李会效率低下(出于某种原因......),

import itertools

readahead = iter(li)
next(readahead)

for a, b in itertools.izip(li, readahead)
    print a, b
Run Code Online (Sandbox Code Playgroud)

  • 对于itertools回答+1,而不是第一个.如果列表很小,则第一个很好,但如果列表非常大,则创建副本效率很低. (2认同)

Anu*_*yal 9

只需跟踪索引并按索引获取上一项

li = 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]
Run Code Online (Sandbox Code Playgroud)

输出:

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
Run Code Online (Sandbox Code Playgroud)

另一种选择是记住最后一项,例如

last_item = None
for item in li:
    print last_item, item
    last_item = item
Run Code Online (Sandbox Code Playgroud)


kin*_*all 5

j = None
for i in li:
    print(j)
    j = i
Run Code Online (Sandbox Code Playgroud)


Jos*_*shD 2

使用循环计数器作为索引。(请务必从 1 开始,以便保持在范围内。)

for i in range(1, len(li)):
  print(li[i], li[i-1])
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

41984 次

最近记录:

15 年,3 月 前