Python 基于运算结果的元组排序列表(除法)

Python 基于运算结果的元组排序列表(除法),python,sorting,tuples,Python,Sorting,Tuples,好的,我已经为此挣扎了一段时间。我刚刚开始学习Python,在这方面非常新 我有一个元组列表,需要按照每个元组中的值的比率进行排序 输入: L = [(1,3), (1,7), (4,8)] 返回已排序的列表: L = [(1,7), (1,3), (4,8)] 它需要使用sort和自定义键进行排序。我见过有人使用itemgetter,但我也不能让这个版本正常工作 我迄今为止的努力: sorted(L, key = lambda x: [(i[0]/float(i[1])) for i in

好的,我已经为此挣扎了一段时间。我刚刚开始学习Python,在这方面非常新

我有一个元组列表,需要按照每个元组中的值的比率进行排序

输入:

L = [(1,3), (1,7), (4,8)]
返回已排序的列表:

L = [(1,7), (1,3), (4,8)]
它需要使用sort和自定义键进行排序。我见过有人使用itemgetter,但我也不能让这个版本正常工作

我迄今为止的努力:

sorted(L, key = lambda x: [(i[0]/float(i[1])) for i in x])
我一直以此为指导:


使用itemgetter似乎是最快的,但我也无法做到这一点…

您已经非常接近了。在
lambda
函数中不需要for循环

>>> L = [(1,3), (1,7), (4,8)]
>>> sorted(L, key=lambda i: i[0]/float(i[1])) # no need for the for loop
[(1, 7), (1, 3), (4, 8)]
>>> 
您也可以使用类似的方法:


key=lambda x:(x[0]/float(x[1])
BTW,如果您使用的是Python2,您可以通过将来自uuu future\uuuuuu导入分区的
放在导入的顶部来获得Python3样式的划分(除非您使用的是非常古老的Python2版本)。然后你就不需要那个
float
转换调用了。如果你想要楼层划分,你应该总是使用
/
,即使你不使用导入,因为最好明确说明你在做什么。这真的很让人沮丧。只是花了几个小时尝试各种不同的方法。你知道如何通过itemgetter方法来实现吗(据说这是最快的?)?像这样使用
itemgetter
没有什么好处,因为每次调用lambda时都会执行两个
itemgetter
调用。最好在lambda之外执行
itemgetter
调用。例如,
ig0,ig1=itemgetter(0),itemgetter(1)
排序(L,key=lambda i:ig0(i)/ig1(i))
。但是,您也可以直接索引到元组中。:)@PM2Ring Yout从我嘴里说出了这些话。这正是我要写的:)但是我忽略了在lambda之外调用
itemgetter()
的事实。我会更新的。
>>> L = [(1,3), (1,7), (4,8)]
>>> from operator import itemgetter
>>> ig = itemgetter(0), itemgetter(1)
>>> sorted(L, key= lambda i: ig[0](i)/float(ig[1](i)))
[(1, 7), (1, 3), (4, 8)]
>>>