我有一个浮点列表,例如 [x1,x2,x3,x4,....xn]
,它们被绘制为折线图。我想找到斜率最陡的一组点。
现在,我在循环中计算一组点之间的差异,并使用 max()
函数来确定最大点。
还有其他优雅的方式吗?
最佳答案
假设 points
是您的值列表,您可以使用以下方法在单行中计算差异:
max_slope = max([x - z for x, z in zip(points[:-1], points[1:])])
但是你在紧凑性上获得的好处,你可能会失去可读性。
在这个列表理解中发生的事情如下:
points[:-1]
& points[1:]
。 Points[:-1]
从原始列表的开头开始,到倒数第二个项目(含)。 Points[1:]
从第二项开始一直到最后一项(再次包含在内。)例子
example_list = [1, 2, 3, 4, 5]
ex_a = example_list[:-1] # [1, 2, 3, 4]
ex_b = example_list[1:] # [2, 3, 4, 5]
zip
不会在 Python 3 中创建列表,因此您需要将它的返回值传递给 list
参数。喜欢:
example_list = [1, 2, 3, 4, 5]
ex_a = example_list[:-1] # [1, 2, 3, 4]
ex_b = example_list[1:] # [2, 3, 4, 5]
print(list(zip(ex_a, ex_b))) # [(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]
如果最大斜率的位置也很有趣,您可以使用 .index()
方法从创建的列表中获取索引。不过,在那种情况下,最好保存推导式创建的列表,而不仅仅是使用它。
https://stackoverflow.com/questions/38262544/