可能重复:
Python - Previous and next values inside a loop
python for loop, how to find next value(object)?
大家好。
我有一个包含很多元素的列表,我使用for循环迭代列表。 例如
li = [2,31,321,41,3423,4,234,24,32,42,3,24,,31,123]
for (i in li):
print i
但是我想得到i的前一个元素,如何实现呢?
我不必使用for循环,所以请随意更改任何内容。谢谢!
答案 0 :(得分:18)
通常,您使用enumerate
或range()
来浏览元素。这是另一种选择
>>> 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)]
每个元组的第二个元素是列表的前一个元素。
答案 1 :(得分:15)
你可以使用zip:
for a, b in zip(li, li[1:]):
print a, b
或者,如果你需要做一些有点发烧友的事情,因为创建一个列表或者拿一片李会效率低下(出于某种原因......),
import itertools
readahead = iter(li)
next(readahead)
for a, b in itertools.izip(li, readahead)
print a, b
答案 2 :(得分:8)
只需跟踪索引并按索引获取上一项
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]
输出:
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
答案 3 :(得分:3)
使用here中的itertools
食谱的选项:
from itertools import tee
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
next(b, None)
return izip(a, b)
for i, j in pairwise(li):
print i, j
答案 4 :(得分:1)
使用循环计数器作为索引。 (一定要从一开始,这样你才能留在范围内。)
for i in range(1,len(li)):
print li[i], li[i-1]
答案 5 :(得分:0)
j = None
for i in li:
print j
j = i
答案 6 :(得分:-2)
li = [2,31,321,41,3423,4,234,24,32,42,3,24,,31,123]
counter = 0
for l in li:
print l
print li[counter-1] #Will return last element in list during first iteration as martineau points out.
counter+=1