我有一个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)