比较列表元素
我想知道如何在一个已经排好序的列表中,把一个元素和下一个元素进行比较,并打印出它们之间的差异。任何帮助都非常感谢。
Eg:
lst = [3.18,10.57,14.95,...]
10.57 - 3.18 = 7.39
14.95 - 10.57 = 4.38
...
5 个回答
4
你需要使用 pairwise()
这个方法,它来自于 itertools
这个库,里面有很多很棒的 Python 功能。
>>> for x,y in pairwise(lst):
... print(y, " - ", x, " = ", y - x)
...
10.57 - 3.18 = 7.390000000000001
14.95 - 10.57 = 4.379999999999999
6
这段代码是用来做某些操作的,但具体的功能需要根据上下文来理解。一般来说,代码块中的内容可能涉及到变量、函数或者其他编程元素。你可以把它想象成一个小工具,帮助我们完成特定的任务。
如果你对代码的具体含义有疑问,可以尝试查找相关的编程资料,或者向更有经验的朋友请教。记住,编程就像学习一门新语言,刚开始可能会觉得有点难,但慢慢来,你会越来越熟练的!
it = iter(lst)
it.next()
print [(x, y, y - x) for (x, y) in itertools.izip(lst, it)]
6
如果你在处理数字数据,建议使用numpy这个库。
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])
如果需要的话,你可以把它转换回列表:
diff_list = list(diff)
否则,你可以像遍历列表那样遍历它:
for item in diff:
print(item)
7.39
4.38
补充说明: 我测试的五种解决方案的速度差不多,所以你可以选择那个更容易理解的。
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