我正在尝试学习 Python,但遇到了这样的问题。
我有一个清单:
a = [[10,5],[9,3],[16,2],[8,8]]
我想得到一个列表,该列表将按 divion arr[i][0]/arr[i][1] 的值进行降序排序。例如,对于列表 a(排序后),我想要:
a =[[8,8],[10,5],[9,3],[16,2]]
我尝试在 a.sort(key = lambda .....) 中使用 lambda,但我失败了。
你能帮我理解它是怎么回事吗?
sorted()
与key
, like一起使用,所以:
>>> 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
另一种方法是使用Fraction
它来避免float
. 不幸Fraction
的是,不适用于 2.4
fractions import Fraction
>>> sorted(a, key=lambda x:Fraction(*x))
[[8, 8], [10, 5], [9, 3], [16, 2]]