操作符.itemgetter()和sort()如何工作?

我有以下代码:

初始化
a=[]
#创建表(名称、年龄、职务)
a、 附加([“尼克”,30,“医生])
a、 附加([“约翰”,8,“学生])
a、 附加([“Paul”,22,“汽车经销商])
a、 附加([“标记”,66,“退休”)
#按年龄把桌子分类
进口经营者
a、 排序(key=operator.itemgetter(1))
#打印表格
印刷品(a)

它创建一个4×3表格,然后按年龄对其进行排序。我的问题是,key=operator.itemgetter(1)到底做什么?操作符.itemgetter函数是否返回项的值?为什么我不能在那里键入类似于key=a[x][1]的内容?或者我可以吗?操作员如何打印表单的某个值,如3x2,即22

  1. Python到底是如何对表进行排序的?我能反向排序吗

  2. 如何根据两列对其进行排序,如first age,然后age是否为相同的b名称

  3. 没有操作员,我怎么做

看起来你对那些东西有点困惑

操作员是一个内置模块,提供一组方便的操作员。换句话说,operator.itemgetter(n)构造一个可调用对象,该对象假定一个iterable对象(例如list、tuple、set)作为输入,并从中提取第n个元素

因此,这里不能使用key=a[x][1],因为python不知道x是什么。相反,您可以使用lambda函数(elem只是一个变量名,没有魔力):

排序(key=lambda elem:elem[1])

或者只是一个普通函数:

def get_second_elem(iterable):
返回iterable[1]
a、 排序(键=获取第二个元素)

因此,这里有一个重要的注意事项:在python中,函数是一级公民,因此可以将它们作为参数传递给其他函数

其他问题:

  1. 是的,您可以反向排序,只需添加reverse=Truea.sort(key=…,reverse=True)
  2. 要按多个列进行排序,可以将itemgetter与多个索引一起使用:operator.itemgetter(1,2),或与lambda一起使用:lambda elem:<elem[1],elem[2])。通过这种方式,列表中的每一项都可以动态地构造一个可比表,然后按照词典(?)顺序相互比较(比较第一个元素,如果相等,则比较第二个元素,等等)
  3. 您可以使用a[2,1]获取[3,2]处的值(索引以零为基础)。使用运算符。。。这是可能的,但不像索引那样干净

有关详细信息,请参阅文档:

  1. operator.itemgetter已解释
  2. Python中按自定义键排序列表

发表评论