Python For Loop, How To Find Next Value(object)?
Solution 1:
It should be noted that none of these solutions work for generators. For that see Glenn Maynards superior solution.
use zip for small lists:
forcurrent, lastin zip(entries[1:], entries):
diff =current-last
This makes a copy of the list (and a list of tuples from both copies of the list) so it's good to use itertools for handling larger lists
import itertools as it
items = it.izip(it.islice(entries, 1, None), entries)
forcurrent, lastin items:
diff =current-last
This will avoid both making a copy of the list and making a list of tuples.
Another way to do it without making a copy is
entry_iter = iter(entries)
entry_iter.next() # Throw away the first versionfor i, entry inenumerate(entry_iter):
diff = entry - entries[i]
And yet another way is:
for i in xrange(len(entries) - 1):
diff = entries[i+1] - entries[i]
This creates an iterator that indexes entries
and advances it by one. It then uses enumerate
to get an indice with the item. The indice starts at 0 and so points to the previous element because we the loop one item in.
Also, as Tyler pointed out in the comment, a loop might be overkill for such a simple problem if you just want to iterate over the differences.
diffs = (current-lastforcurrent, lastin
it.izip(it.islice(entries, 1, None), entries))
Solution 2:
zip
works for lists, but for the general case:
defpairs(it):
it = iter(it)
prev = next(it)
for v in it:
yield prev, v
prev = v
a = [1,2,3,4,5]
for prev, cur in pairs(a):
print cur - prev
import itertools as it
for prev, cur in pairs(it.cycle([1,2,3,4])):
print cur - prev
This works efficiently for large containers, and more importantly, it works for iterators:
for prev, cur inpairs(open("/usr/share/dict/words").xreadlines()):
print cur, prev,
Edit: I changed the generator to omit the first value with no previous value, since that fits the original question better ("finding differences between adjacent pairs"), and I added an example case showing that it works for an infinitely-repeating iterator.
Solution 3:
i don't know exactly what are you looking but maybe this can help :
first= entries[0]
for entry in entries[1:]:
last= entry
diff =last-firstfirst= entry
Solution 4:
very simply, using enumerate, no fancy stuff
>>>entries=[10,20,30,40]>>>for n,i inenumerate(entries):...try:...print entries[n+1] - i...except IndexError:...print entries[-1]...
10
10
10
40
Post a Comment for "Python For Loop, How To Find Next Value(object)?"