3

我正在尝试学习 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,但我失败了。

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

4

2 回答 2

3

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]
于 2013-07-08T06:45:06.113 回答
2

你没有说你使用的是 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]]
于 2013-07-08T06:46:57.557 回答