lifhv 发表于 2020-11-30 10:19:39

有哪位大神帮个忙


给定一个点列表(x, y),根据它从原点开始的斜率(0,0),
          Slope = y/x

对这些点进行降序排序。
假设没有点有相同的斜率,你不需要考虑(0,0)本身,但是注意当直线垂直于x轴时,我们将其斜率还原为∞。你可以使用浮点数('inf')来表示∞
在python中
(可以在前面插入垂直斜率的点。)

def sort_points(points):

笨鸟学飞 发表于 2020-11-30 12:58:01

看不太懂你的表述,这里提供一个思路,不知道是不是符合你的预期
1、给定点列表[(x,y),(x1,y1)…(xn,yn)]
2、定义slope列表,利用for in 循环,把slope结果逐个放入slope列表
3、定义字典,把点列表的元素和slope列表的元素一一对应组建成字典
4、对slope列表用sort方法排序
5、利用for in 循环,把slope列表的元素对应的键值从字典中一一取出
6、取出的点加入列表就完事儿了

lifhv 发表于 2020-11-30 13:11:59

笨鸟学飞 发表于 2020-11-30 12:58
看不太懂你的表述,这里提供一个思路,不知道是不是符合你的预期
1、给定点列表[(x,y),(x1,y1)…(xn,yn)]
...

是这样的,感谢

lifhv 发表于 2020-11-30 13:12:46

lifhv 发表于 2020-11-30 13:11
是这样的,感谢

有具体的表达吗

冬雪雪冬 发表于 2020-11-30 14:18:47

本帖最后由 冬雪雪冬 于 2020-11-30 14:20 编辑

>>> list1 = [(1.2, 3.4), (2.1, 5.5), (10.2, -3)]
>>> list1.sort(key = lambda x: float('inf') if x == 0 else x / x)
>>> list1
[(10.2, -3), (2.1, 5.5), (1.2, 3.4)]

lifhv 发表于 2020-11-30 15:14:17

冬雪雪冬 发表于 2020-11-30 14:18


感谢,那用def表达呢

冬雪雪冬 发表于 2020-11-30 15:43:28

lifhv 发表于 2020-11-30 15:14
感谢,那用def表达呢

前面的回帖忘了用降序了。

def sort_points(points):
    points.sort(key = lambda x: float('inf') if x == 0 else x / x, reverse = True)


points = [(1.2, 3.4), (2.1, 5.5), (0, -3)]
sort_points(points)
print(points)
页: [1]
查看完整版本: 有哪位大神帮个忙