2013-07-08 109 views
3

我在学习Python,我遇到了这样的问题。按分区值排序列表

我有一个列表:

a = [[10,5],[9,3],[16,2],[8,8]] 

我想将由迪维永改编[I] [0]/ARR的值进行排序倒序列表[I] [1]。例如,对于列表(排序之后)我想有:

a =[[8,8],[10,5],[9,3],[16,2]] 

我试图在a.sort使用拉姆达(键=拉姆达.....),但我失败了。

你能帮我理解它是如何的吗?

回答

3

使用sorted()key一样,所以:

>>> 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] 
+0

我读这样的:http://wiki.python.org/moin/HowTo/Sorting/但也许错过了不便。谢谢! – kvatashydze

+0

它讲述了Key函数,这就是我们在这里使用的,lambda获取列表中的每个元素,比如'[10,5]','[9,3]'等等,并且返回用来分割对列表进行排序。 –

2

你不会说你是否是usi ng Python2或Python3。在Python2你需要确保这是一个浮点divison

>>> 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]] 
+0

Python 2.4。除0之外没有机会分割,但我完全忘记了float()。 __future__进口部门是否也有助于在lambda函数中正确划分? – kvatashydze

+0

@geluinie,当然是来自__future__进口部门'也可以 –