Python 如何使用列表理解来删除彼此相差10以内的值,只保留1?
我的清单如下:Python 如何使用列表理解来删除彼此相差10以内的值,只保留1?,python,list,python-2.7,list-comprehension,python-2.x,Python,List,Python 2.7,List Comprehension,Python 2.x,我的清单如下: [[454.0, 82], [451.0, 82], [449.5, 82], [448.0, 82], [316.0, 82], [313.0, 82], [311.5, 82]] 我想使用列表理解来删除彼此之间在10以内的项 以下是我迄今为止所尝试的: >>> lst = [item for item in lst for i in range(len(lst)) if item[i+1] - item[i] > 10] Traceback (mos
[[454.0, 82], [451.0, 82], [449.5, 82], [448.0, 82], [316.0, 82], [313.0, 82], [311.5, 82]]
我想使用列表理解来删除彼此之间在10以内的项
以下是我迄今为止所尝试的:
>>> lst = [item for item in lst for i in range(len(lst)) if item[i+1] - item[i] > 10]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>>
我的意思是,如果a
-b
的绝对值大于10,则彼此之间的距离不超过10
我想让它为彼此相差10以内的所有值返回1个值。您在这里走到末尾--最后一个条目的原始列表之外是I+1:
for i in range(len(lst)) if item[i+1]
如果您只需执行len(lst)-1
另一种方法是不使用列表理解,而是使用普通的for,并检查更多的条件。您可以这样做
a=[[454.0, 82], [451.0, 82], [449.5, 82], [448.0, 82], [316.0, 82], [313.0, 82], [311.5, 82]]
result=[]
diff=10
num=0
for i in a:
if abs(i[0]-num)<10:
if i[0]>num:
result.append(i)
num=i[0]
else:
result.append(i)
num=i[0]
print result
a=[[454.0,82]、[451.0,82]、[449.5,82]、[448.0,82]、[316.0,82]、[313.0,82]、[311.5,82]]
结果=[]
差值=10
num=0
对于我来说,在一个:
如果abs(i[0]-num)num:
结果.追加(i)
num=i[0]
其他:
结果.追加(i)
num=i[0]
打印结果
输出:[[454.0,82],[316.0,82]你能更清楚地解释一下相互之间在10以内的项目是什么意思吗?好的,没问题,检查我的编辑为什么你认为python会为你找到欧几里德标准?@aj8uppal a和b是什么,确切地说?似乎建议的输出应该为空,因为对于示例中的任何元素,距离10.0Yes内还有另一个元素。但是我怎样才能把它做成一行呢?(列表理解)
a=[[454.0, 82], [451.0, 82], [449.5, 82], [448.0, 82], [316.0, 82], [313.0, 82], [311.5, 82]]
result=[]
diff=10
num=0
for i in a:
if abs(i[0]-num)<10:
if i[0]>num:
result.append(i)
num=i[0]
else:
result.append(i)
num=i[0]
print result