Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there an easy way to get next and prev values in a for-loop?

So...is there an easy way to get next and previous values while iterating with a for-loop in Python?

I know this can be easily done if you do something like:

a = [3,4,5,6,3,4,5]
for x in range(len(a)):
    next = a[x+1]

But what about:

for x in a:
    x.next??
like image 468
pyramidface Avatar asked Dec 12 '22 02:12

pyramidface


2 Answers

easiest way I know of is

for x,next in zip (a, a[1:]):
  # now you have x and next available
like image 34
Jon Kiparsky Avatar answered Jan 18 '23 23:01

Jon Kiparsky


Here is a common pattern that I use to iterate over pairs of items in a sequence:

>>> a = range(10)
>>> for i, j in zip(a, a[1:]):
...  print i, j
... 
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9

If you want three items (prev, item, next) you can do this:

>>> for i, j, k in zip(a, a[1:], a[2:]):
...  print i, j, k
... 
0 1 2
1 2 3
2 3 4
3 4 5
4 5 6
5 6 7
6 7 8
7 8 9

i is the previous element, j is the current element, k is the next element.

Of course, this "starts" at 1 and "ends" at 8. What should you receive as prev/next at the ends? Perhaps None? Probably easiest to just do this:

>>> a = [None] + a + [None]
>>> for i, j, k in zip(a, a[1:], a[2:]):
...  print i, j, k
... 
None 0 1
0 1 2
1 2 3
2 3 4
3 4 5
4 5 6
5 6 7
6 7 8
7 8 9
8 9 None
like image 99
FogleBird Avatar answered Jan 18 '23 22:01

FogleBird