How to get the previous element when using a for loop? [duplicate]
Possible Duplicates:
Python - Previous and next values inside a loop python for loop, how to find next value(object)?
I've got a list that contains a lot of elements, I iterate over the list using a for
loop开发者_JAVA技巧. For example:
li = [2, 31, 321, 41, 3423, 4, 234, 24, 32, 42, 3, 24, 31, 123]
for i in li:
print(i)
But I want to get the element before i
. How can I achieve that?
You can use zip
:
for previous, current in zip(li, li[1:]):
print(previous, current)
or, if you need to do something a little fancier, because creating a list or taking a slice of li
would be inefficient, use the pairwise
recipe from itertools
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)
Normally, you use enumerate()
or range()
to go through the elements. Here's an alternative using 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)]
the 2nd element of each tuple is the previous element of the list.
Just keep track of index using enumerate
and get the previous item by index
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]
Output:
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
Another alternative is to remember the last item, e.g.
last_item = None
for item in li:
print(last_item, item)
last_item = item
Simply keep track of the previous value using a separate variable.
j = None
for i in li:
print(j)
j = i
An option using the itertools
recipe from here:
from itertools import tee
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
next(b, None)
return zip(a, b)
for i, j in pairwise(li):
print(i, j)
Use a loop counter as an index. (Be sure to start at 1 so you stay in range.)
for i in range(1, len(li)):
print(li[i], li[i-1])
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
精彩评论