gpt4 book ai didi

python - operator.itemgetter() 和 sort() 是如何工作的?

转载 作者:IT老高 更新时间:2023-10-28 20:33:43 28 4
gpt4 key购买 nike

我有以下代码:

# 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

  1. Python 究竟是如何对表格进行排序的?我可以对其进行反向排序吗?

  2. 如何根据第一年龄等两列对它进行排序,然后如果年龄是相同的 b 名称?

  3. 没有operator怎么办?

最佳答案

看起来你对所有这些东西有点困惑。

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 中,函数是 first-class citizens ,因此您可以将它们作为参数传递给其他函数。

其他问题:

  1. 是的,你可以反向排序,只需添加 reverse=True:a.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 explained
  2. Sorting list by custom key in Python

关于python - operator.itemgetter() 和 sort() 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18595686/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com