练习
Topic source>> def by_name(t):
return t[0]
和return t[0][0]有什么差别啊?
>>> def by_name(t):
return t[0][0]
>>> L2=sorted(L,key=by_name)
>>> print(L2)
[('Adam', 92), ('Bob', 75), ('Bart', 66), ('Lisa', 88)]
t[0]是名字,t[0][0]是每个名字的首字母。t[0]中Bart在Bob前面,而t[0][0]按照原顺序,Bob在Bart前面。sorted(L,key)的逻辑是把key函数依次作用在L中的每一个元素上,因此定义key函数的时候对象应该是L中的单个元素而不是整个L。
张三阀阅
#4 Created at 2021/7/28 11:05
t[0]是名字,t[0][0]是每个名字的首字母。t[0]中Bart在Bob前面,而t[0][0]按照原顺序,Bob在Bart前面。sorted(L,key)的逻辑是把key函数依次作用在L中的每一个元素上,因此定义key函数的时候对象应该是L中的单个元素而不是整个L。
是否这样理解:
跟常规的list表达不一样,sorted函数运行时,参数L是每次传其中一个元素进去,例子中就是把L的元素每一个tuple() 传到key里,所以可以用t[n]表示每个tuple里的元素。
sorted([36, 5, -12, 9, -21])
[-21, -12, 5, 9, 36]
对比上面的代码而言,sorted每次取出来的是值是list里的每一个元素;
L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
所以如果list里包含的是多个tuple的话,那sorted取出来的值是一个tuple而不是list本身。
所以使用L[0]索引进行取值的时候也是从tuple里取值,所以这里的L[0]是'Bob'而不是('Bob, 75')。
- 1
浅言87780
L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
def by_name(t):
#t[0]代表姓名列,t[1]代表分数列
return t[0].lower()
def by_score(t):
#默认排列顺序为从低到高t[1], 要使其从高到低,将分数先取负数-t[1]即可
return -t[1]
L2 = sorted(L, key=by_name)
print(L2)
L2 = sorted(L, key=by_score)
print(L2)