Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 比较列表元素_Python - Fatal编程技术网

Python 比较列表元素

Python 比较列表元素,python,Python,如何将排序列表中的一个元素与下一个元素进行比较,并打印出它们的差异。任何帮助都将不胜感激 Eg: lst = [3.18,10.57,14.95,...] 10.57 - 3.18 = 7.39 14.95 - 10.57 = 4.38 ... 使用zip,并将列表本身压缩 l = [1, 2, 4, 7] [b - a for a, b in zip(l, l[1:])] # [1, 2, 3] 如果您正在操纵数值数据,请考虑使用NUMPY < /P> import numpy as

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

Eg: 
lst = [3.18,10.57,14.95,...]
10.57 - 3.18 =  7.39
14.95 - 10.57 = 4.38
...

使用
zip
,并将列表本身压缩

l = [1, 2, 4, 7]
[b - a for a, b in zip(l, l[1:])]

# [1, 2, 3]

如果您正在操纵数值数据,请考虑使用NUMPY < /P>

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

您需要来自的
pairwise()
,Python的许多优点都来自于此

>>> for x,y in pairwise(lst): 
...     print(y, " - ", x, " = ", y - x)
... 
10.57  -  3.18  =  7.390000000000001
14.95  -  10.57  =  4.379999999999999

请张贴你迄今为止所写的代码;请使用家庭作业标签。可能没有关系,但我发现这篇文章最有帮助:我讨厌参与“同情投票”的趋势,但无论如何都有一个。这个答案没什么错。+1,
成对
很好,如果它与
石斑鱼
一起能成为iTrools合适的话,那就太好了……如果你已经在使用numpy,你还不如使用numpy.diff,这正是DGT所寻找的-无需创建原始列表的其他副本。请注意,这将创建
l
(减去其第一个元素)的副本,然后(在Python<3中)创建另一个包含
l
的所有元素及其副本的所有元素的列表。您应该更喜欢基于
iter
的解决方案(例如or),尤其是如果您的
列表很大的话!
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
>>> for x,y in pairwise(lst): 
...     print(y, " - ", x, " = ", y - x)
... 
10.57  -  3.18  =  7.390000000000001
14.95  -  10.57  =  4.379999999999999