我有一个列表,我想找出相邻元素之间的差异:
可能重复:
Python - 列表元素之间的差异
可能重复:
Python - 列表元素之间的差异
a = [0, 4, 10, 100]
find_diff(a)
>>> [4,6,90]
你如何编写find_diff()函数?我可以用"for"迭代器编写它,但我相信有非常简单的方法可以用一行代码实现。
a = [0, 4, 10, 100]
find_diff(a)
>>> [4,6,90]
你如何编写find_diff()函数?我可以用"for"迭代器编写它,但我相信有非常简单的方法可以用一行代码实现。
>>> a = [0, 4, 10, 100]
# basic enumerate without condition:
>>> [x - a[i - 1] for i, x in enumerate(a)][1:]
[4, 6, 90]
# enumerate with conditional inside the list comprehension:
>>> [x - a[i - 1] for i, x in enumerate(a) if i > 0]
[4, 6, 90]
# the zip version seems more concise and elegant:
>>> [t - s for s, t in zip(a, a[1:])]
[4, 6, 90]
就性能而言,似乎没有太大的差异:
In [5]: %timeit [x - a[i - 1] for i, x in enumerate(a)][1:]
1000000 loops, best of 3: 1.34 µs per loop
In [6]: %timeit [x - a[i - 1] for i, x in enumerate(a) if i > 0]
1000000 loops, best of 3: 1.11 µs per loop
In [7]: %timeit [t - s for s, t in zip(a, a[1:])]
1000000 loops, best of 3: 1.1 µs per loop
使用 itertools.pairwise
(Python 3.10+):
>>> from itertools import pairwise
>>> a = [0, 4, 10, 100]
>>> [y - x for x, y in pairwise(a)]
[4, 6, 90]
pairwise
。from itertools import izip, tee
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
next(b, None)
return izip(a, b)
pairwise
。我认为我并不孤单,因为我直接从文档中引用了这个例子。 - Steven Rumbalski[x - a[i-1] if i else None for i, x in enumerate(a)][1:]