2013-07-08 108 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__進口部門'也可以 –