gae*_*fan 7 python sorting lambda
我经常使用lambda表达式在Python中进行排序,虽然它工作正常,但我觉得它不是很易读,并希望有更好的方法.这是我的典型用例.
我有一个数字列表,例如, x = [12, 101, 4, 56, ...]
我有一个单独的索引列表: y = range(len(x))
我想y根据值中的值排序x,我这样做:
y.sort(key=lambda a: x[a])
有没有使用lambda这样做的好方法?
Dav*_*rby 12
您可以使用__getitem__列表x 的方法.这与lambda的行为相同,因为它是作为C函数而不是python函数实现的,因此速度会快得多:
>>> x = [12, 101, 4, 56]
>>> y = range(len(x))
>>> sorted(y, key=x.__getitem__)
[2, 0, 3, 1]
不优雅,但是:
[a for (v, a) in sorted((x[a], a) for a in y)]
顺便说一句,你可以这样做,而无需创建单独的索引列表:
[i for (v, i) in sorted((v, i) for (i, v) in enumerate(x))]
我不确定这是否是您想要的替代方案,但您可以使用以下方式定义关键功能def:
def sort_key(value):
    return x[value]
y.sort(key = sort_key)
就我个人而言,我认为这比 更糟糕,lambda因为它将排序标准从执行排序的代码行移开,并且不必要地将函数添加sort_key到命名空间中。
| 归档时间: | 
 | 
| 查看次数: | 2553 次 | 
| 最近记录: |