我在学习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]'等等,并且返回用来分割对列表进行排序。 –