Python 按除法值对列表进行排序

Python 按除法值对列表进行排序,python,list,sorting,lambda,key,Python,List,Sorting,Lambda,Key,我正在努力学习Python,我遇到了这样的问题 我有一份清单: a = [[10,5],[9,3],[16,2],[8,8]] 我想获得一个列表,该列表将按divion arr[I][0]/arr[I][1]的值按desc排序。例如,对于列表a(排序后),我希望: a =[[8,8],[10,5],[9,3],[16,2]] 我试图在a.sort(key=lambda…)中使用lambda,但失败了 你能帮我理解一下它是怎么回事吗?使用键,比如: >>> a = [[10,

我正在努力学习Python,我遇到了这样的问题

我有一份清单:

a = [[10,5],[9,3],[16,2],[8,8]]
我想获得一个列表,该列表将按divion arr[I][0]/arr[I][1]的值按desc排序。例如,对于列表a(排序后),我希望:

a =[[8,8],[10,5],[9,3],[16,2]]
我试图在a.sort(key=lambda…)中使用lambda,但失败了

你能帮我理解一下它是怎么回事吗?

使用
键,比如:

>>> a = [[10,5],[9,3],[16,2],[8,8]]
>>> sorted(a, key= lambda x: x[0]/x[1])
[[8, 8], [10, 5], [9, 3], [16, 2]]
从文件来看

key specifies a function of one argument that is used to extract a comparison key from each list element
这里,
lambda
函数返回第一个元素除以第二个元素的答案

lambda x: x[0]/x[1]

你不会说你是在使用Python2还是Python3。在Python2中,您需要确保它是一个浮点除数

>>> a = [[10,5],[9,3],[16,2],[8,8]]
>>> sorted(a, key=lambda x: float(x[0]) / x[1])
[[8, 8], [10, 5], [9, 3], [16, 2]]
如果有被0除的机会,你需要这样的东西

>>> sorted(a, key= lambda x: float(x[0])/x[1] if x[1] else float('inf'))>>> from 
另一种方法是使用
分数
,这避免了
浮点
的精度问题。不幸的是,
分数
不适用于2.4

fractions import Fraction
>>> sorted(a, key=lambda x:Fraction(*x))
[[8, 8], [10, 5], [9, 3], [16, 2]]

我在读这篇文章:但可能错过了smth。非常感谢。它讨论了关键函数,这就是我们在这里使用的,lambda获取列表中的每个元素,如
[10,5]
[9,3]
等等,并返回用于对列表排序的除法。Python 2.4。不可能除以0,但我完全忘记了float()。来自未来导入部门是否也有助于lambda职能部门的正确划分?@geluinie,当然是来自未来导入部门的