没有 lambda 表达式的 python 排序
我经常使用 lambda 表达式在 Python 中进行排序,虽然它工作得很好,但我发现它的可读性不太好,并且希望可能有更好的方法。这是我的一个典型用例。
我有一个数字列表,例如,x = [12, 101, 4, 56, ...]
我有一个单独的索引列表:y = range(len(x) )
我想根据 x
中的值对 y
进行排序,我这样做:
y.sort(key=lambda a: x[a])
有没有一种好的方法可以在不使用 lambda 的情况下做到这一点?
I often do sorts in Python using lambda expressions, and although it works fine, I find it not very readable, and was hoping there might be a better way. Here is a typical use case for me.
I have a list of numbers, e.g., x = [12, 101, 4, 56, ...]
I have a separate list of indices: y = range(len(x))
I want to sort y
based on the values in x
, and I do this:
y.sort(key=lambda a: x[a])
Is there a good way to do this without using lambda?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以使用列表 x 的 __getitem__ 方法。这与 lambda 的行为相同,并且速度更快,因为它是作为 C 函数而不是 python 函数实现的:
You can use the
__getitem__
method of the list x. This behaves the same as your lambda and will be much faster since it is implemented as a C function instead of a python function:不优雅,但是:
顺便说一句,您可以在不创建单独的索引列表的情况下执行此操作:
Not elegantly, but:
BTW, you can do this without creating a separate list of indices:
我不确定这是否是您想要的替代方案,但您可以使用
def
定义关键函数:就个人而言,我认为这比
lambda
更糟糕因为它将排序标准从执行排序的代码行移开,并且不必要地将sort_key
函数添加到您的命名空间中。I'm not sure if this is the kind of alternative you meant, but you could define the key function with a
def
:Personally, I think this is worse than the
lambda
as it moves the sort criteria away from the line of code doing the sort and it needlessly adds thesort_key
function into your namespace.我想如果我想创建另一个函数,我可以这样做(未测试):
虽然我认为我更喜欢使用 lambda 来避免创建额外的函数。
I suppose if I wanted to create another function, I could do it something like this (not tested):
Though I think I prefer to use lambda instead to avoid having to create an extra function.