我有以下代码:
# initialize
a = []
# create the table (name, age, job)
a.append(["Nick", 30, "Doctor"])
a.append(["John", 8, "Student"])
a.append(["Paul", 22, "Car Dealer"])
a.append(["Mark", 66, "Retired"])
# sort the table by age
import operator
a.sort(key=operator.itemgetter(1))
# print the table
print(a)它创建一个4x3表,然后按年龄对其进行排序。我的问题是,key=operator.itemgetter(1)到底是做什么的?operator.itemgetter函数返回项的值吗?为什么我不能在那里键入类似key=a[x][1]的内容呢?或者我可以?如何使用运算符打印表单的某个值,如3x2,即22
operator我怎么能做到呢?发布于 2013-09-03 15:35:42
看来你对这些东西有点糊涂了。
operator是一个内置模块,提供了一组方便的操作人员.换句话说,operator.itemgetter(n)构造了一个可调用的函数,它将一个可迭代对象(例如列表、元组、集合)作为输入,并从其中提取第n个元素。
因此,您不能在那里使用key=a[x][1],因为python不知道x是什么。相反,您可以使用lambda函数(elem只是一个变量名,没有魔力):
a.sort(key=lambda elem: elem[1])或者只是一个普通的功能:
def get_second_elem(iterable):
return iterable[1]
a.sort(key=get_second_elem)因此,这里有一个重要的注意事项:在python中,函数是一等公民,所以您可以将它们作为参数传递给其他函数。
其他问题:
reverse=True:a.sort(key=..., reverse=True)itemgetter与多个索引:operator.itemgetter(1,2)或lambda:lambda elem: (elem[1], elem[2])一起使用。这样,就可以动态地为列表中的每一项构造可迭代性,而在词典学(?)顺序(第一元素比较,如果相等,则比较第二元素,等等)a[2,1]获取3,2的值(索引是零的).使用操作员..。这是可能的,但不像索引那样干净。详情请参阅文件:
发布于 2015-04-14 14:03:19
Python初学者的答案
用简单的话说:
key=参数sort需要一个键函数(应用于要排序的对象),而不是单个键值和operator.itemgetter(1)提供给您的:一个从类似列表的对象中获取第一项的函数。(更准确地说,这些是可调用的,而不是函数,但这是一个经常被忽略的区别。)
发布于 2013-09-03 15:31:27
您正在问很多问题,您可以通过阅读文件来回答自己,所以我将给您一个一般性的建议:阅读它并在python中进行实验。您将看到itemgetter返回一个可调用的:
>>> func = operator.itemgetter(1)
>>> func(a)
['Paul', 22, 'Car Dealer']
>>> func(a[0])
8若要以不同的方式执行此操作,可以使用lambda
a.sort(key=lambda x: x[1])并将其逆转:
a.sort(key=operator.itemgetter(1), reverse=True)按多列排序:
a.sort(key=operator.itemgetter(1,2))见分类如何。
https://stackoverflow.com/questions/18595686
复制相似问题