adjacent differences with a list comprehension

Fernando Perez fperez528 at yahoo.com
Mon Mar 24 17:46:51 EST 2003


Phil Schmidt wrote:

> Given a list of numbers, such as:
> 
> L = [2, 5, 8, 3, 9, 1]
> 
> I want to generate a list containing the differences between adjacent
> elements, i.e.,
> 
> Ld = [3, 3, -5, 6, -8]
> 
> I don't see how I can do this (easily/elegantly) with list
> comprehensions.
> 
> Any suggestions? Thanks!

Numeric provides the simplest possible way of writing this:

In [1]: L = array([2, 5, 8, 3, 9, 1])

In [2]: L[1:]-L[:-1]
Out[2]: array([ 3,  3, -5,  6, -8])

Note that in the above, the data is NOT copied when you do L[1:], so even if L 
is a multi-megabyte array, you won't incurr a copy penalty.  The semantics of 
Numeric slicing is different from that of python lists, for very good reasons. 
And the loop is done in C, so it's extremely fast.

Cheers,

f.




More information about the Python-list mailing list