首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >比较列表元素

比较列表元素
EN

Stack Overflow用户
提问于 2011-05-29 08:48:45
回答 5查看 3.3K关注 0票数 2

如何将一个元素与排序列表中的下一个元素进行比较,并打印出它们之间的差异。任何帮助都将不胜感激。

代码语言:javascript
运行
复制
Eg: 
lst = [3.18,10.57,14.95,...]
10.57 - 3.18 =  7.39
14.95 - 10.57 = 4.38
...
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-05-29 08:54:35

如果您正在操作数值数据,请考虑使用numpy

代码语言:javascript
运行
复制
import numpy as np

lst = [3.18,10.57,14.95]
arr = np.array(lst)

diff = np.diff(arr)

>>> diff
array([ 7.39,  4.38])

如果有必要,您可以将其转换回list:

代码语言:javascript
运行
复制
diff_list = list(diff)

否则,您可以迭代它,就像迭代列表一样:

代码语言:javascript
运行
复制
for item in diff: 
    print(item)

7.39
4.38

编辑:我计时的五个解决方案非常接近,所以选择一个更容易阅读的解决方案

代码语言:javascript
运行
复制
t = timeit.Timer("[b - a for a, b in zip(l, l[1:])]", "l = range(int(1e6))")
print(t.timeit(1))
>>> 0.523894071579

t = timeit.Timer("list(np.diff(np.array(l)))", "import numpy as np; l = range(int(1e6))")
print(t.timeit(1))
>>> 0.484916915894

t = timeit.Timer("diffs = [l[x + 1] - l[x] for x in range(len(l) - 1)]", "l = range(int(1e6))")
print(t.timeit(1))
>>> 0.363043069839

t = timeit.Timer("[(x, y, y - x) for (x, y) in itertools.izip(l, it)]", "l = range(int(1e6)); it = iter(l); it.next()")
print(t.timeit(1))
>>> 0.54354596138

# pairwise solution
t = timeit.Timer("a, b = itertools.tee(l); next(b, None); [(x, y) for x, y in itertools.izip(a, b)]", "l = range(int(1e6));")
print(t.timeit(1))
>>> 0.477301120758
票数 6
EN

Stack Overflow用户

发布于 2011-05-29 08:52:46

代码语言:javascript
运行
复制
it = iter(lst)
it.next()
print [(x, y, y - x) for (x, y) in itertools.izip(lst, it)]
票数 6
EN

Stack Overflow用户

发布于 2011-05-29 09:00:44

你需要来自itertoolspairwise() recipe,很多Python的优点都来自于它。

代码语言:javascript
运行
复制
>>> for x,y in pairwise(lst): 
...     print(y, " - ", x, " = ", y - x)
... 
10.57  -  3.18  =  7.390000000000001
14.95  -  10.57  =  4.379999999999999
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6165277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档