我有以下代码:
初始化
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
-
Python到底是如何对表进行排序的?我能反向排序吗
-
如何根据两列对其进行排序,如first age,然后age是否为相同的b名称
-
没有
操作员,我怎么做
看起来你对那些东西有点困惑
操作员是一个内置模块,提供一组方便的操作员。换句话说,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中,函数是一级公民,因此可以将它们作为参数传递给其他函数
其他问题:
- 是的,您可以反向排序,只需添加
reverse=True:a.sort(key=…,reverse=True) - 要按多个列进行排序,可以将
itemgetter与多个索引一起使用:operator.itemgetter(1,2),或与lambda一起使用:lambda elem:<elem[1],elem[2])。通过这种方式,列表中的每一项都可以动态地构造一个可比表,然后按照词典(?)顺序相互比较(比较第一个元素,如果相等,则比较第二个元素,等等) - 您可以使用
a[2,1]获取[3,2]处的值(索引以零为基础)。使用运算符。。。这是可能的,但不像索引那样干净
有关详细信息,请参阅文档:
operator.itemgetter已解释- Python中按自定义键排序列表