我有一个元素k和一个名为A的列表列表。我必须使用基于A中第k个元素的排序函数对A中的元素进行排序。
Ex:
k=1
A=[[10,20,30],[100,5,300]]
输出应为
[[100,5,300],[10,20,30]]
我可以使用下面的代码轻松地做到这一点。
def mysort(x):
return (x[k])
k=1
A=[[10,20,30],[100,5,300]]
print(sorted(A,key=mysort))
但是我在这里要问的是我想将变量k传递给函数mysort。
答案 0 :(得分:2)
operator.itemgetter
对于特定于 的用例很方便:
from operator import itemgetter
res = sorted(A, key=itemgetter(k))
functools.partial
提供了更通用的解决方案:
from functools import partial
def mysort(x, index):
return x[index]
res = sorted(A, key=partial(mysort, index=k))
答案 1 :(得分:0)
您可以为此创建一个lambda-lambda是(kindof)匿名函数:
k=1
A=[[10,20,30],[100,5,300]]
print(sorted(A,key=lambda x:x[k]))
输出:
[[100, 5, 300], [10, 20, 30]]
此帖子why-are-python-lambdas-useful对其进行了更详细的说明,官方文档位于此处:lambda expressions
lambda lambda x:x[k]
使用A
的每个元素,并根据它的第k个值对列表进行排序。
答案 2 :(得分:0)
我认为您正在寻找的是这个
def mysort(k):
return lambda x: x[k]
# ...
sorted(A, key=mysort(k))
幸运的是,这是在标准库的operator
中实现的:
from operator import itemgetter
k = 1
sorted(A, key=itemgetter(k))
答案 3 :(得分:0)
您可以使用闭包动态构建关键参数的功能:
def mysort(k):
def f(x):
return x[k]
return f
k=1
A=[[10,20,30],[100,5,300]]
print(sorted(A,key=mysort(k)))