没有看中一个内胆,但你可以迭代值的列表,并把它们添加到一些新的列表,如果当前值比在新的列表中的最后一个值越大,使用[-1]
:
lst = range(10)
diff = 3
new = []
for n in lst:
if not new or abs(n - new[-1]) >= diff:
new.append(n)
之后,new
是[0, 3, 6, 9]
。
关于你的评论:“如果我不得不代替坐标(x,y)的名单是什么?”:在这种情况下,你做同样的事情,不同的是,而不是仅仅比较数字,你必须找到两点之间的Euclidean distance。因此,假设lst
是(x,y)
对列表:
if not new or ((n[0]-new[-1][0])**2 + (n[1]-new[-1][1])**2)**.5 >= diff:
或者,您可以将您(x,y)
对转换成数字complex
。对于那些,基本操作,如加法,减法和绝对值已经定义,所以你可以再次使用上面的代码。现在
lst = [complex(x,y) for x,y in lst]
new = []
for n in lst:
if not new or abs(n - new[-1]) >= diff: # same as in the first version
new.append(n)
print(new)
,new
是代表点复数的列表:[0j, (3+3j), (6+6j), (9+9j)]
谢谢你,它的工作原理。如果我有一个坐标列表(x,y)怎么办?我将如何更改代码? –
@ S.sonia看我的编辑。 –
非常感谢,非常有帮助! –