打印差异大于一个值的列表元素



我有一个Python列表。

x = [230, 235, 300, 480, 480, 506, 515, 516]

我想打印一个包含Array x中元素的列表,其差值超过一个值(假设为10(。因此,新列表将只包含与下一个元素相差超过10的元素。输出列表应包含与给定列表中的相邻元素相差超过10的元素。输出应该是[2303080516]的列表

我想做一个函数来实现这一点。

b = [0] + x
t = []
for i in range(len(b)-1):
if(b[i+1]-b[i]>10):
t.append(b[i])
print(t)

我试过了。但我没有得到合适的输出。

您可以尝试以下操作:

a=[230,235,300,480,480,506,515,516]
b=[0]+a
c=[]
for i in range(0,len(b)-1):
if((b[i+1]-b[i])>10):
c.append(b[i+1])
print(c)

输出:

[230, 300, 480, 506]

使用numpy:

import numpy as np
xarr = np.array(x)
result = xarr[np.where(np.diff(xarr) > 10)[0]+1]

产品:

array([300, 480, 506])

我相信这可能就是你想要的?

试试这个:

print([k for k,v in zip(x, x[1:]) if abs(k-v) > 10])

zip是你的朋友。

注意:这甚至适用于具有向上和向下值的列表(意味着有时是大数字,有时是小数字(,因为我使用abs

更新:

l=[(k,v) for k,v in zip(x[1:], x) if abs(k-v) >= 10]
print([list(zip(*l))[1][0]]+list(list(zip(*l))[0]))

工作以获得所需的输出,现在是你的朋友。

使用迭代器:

import itertools
def gapFilter(l, gap_value):
it1, it2 = itertools.tee(l)
next(it2)
return [x for x, y in zip(it1, it2) if abs(x-y) >= gap_value]

这里有的实例

要获得初始的0,只需在计算之前将其附加到列表中即可。Python3示例:

gapFilter([0, *x], 10)

最新更新