我在學習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使用拉姆達(鍵=拉姆達.....),但我失敗了。
你能幫我理解它是如何的嗎?
我在學習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使用拉姆達(鍵=拉姆達.....),但我失敗了。
你能幫我理解它是如何的嗎?
使用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]
你不會說你是否是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]]
Python 2.4。除0之外沒有機會分割,但我完全忘記了float()。 __future__進口部門是否也有助於在lambda函數中正確劃分? – kvatashydze
@geluinie,當然是來自__future__進口部門'也可以 –
我讀這樣的:http://wiki.python.org/moin/HowTo/Sorting/但也許錯過了不便。謝謝! – kvatashydze
它講述了Key函數,這就是我們在這裏使用的,lambda獲取列表中的每個元素,比如'[10,5]','[9,3]'等等,並且返回用來分割對列表進行排序。 –