Discuss / Python / 练习

练习

Topic source

浅言87780

#1 Created at ... [Delete] [Delete and Lock User]

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)

>> 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)]

亚当陈杨

#3 Created at ... [Delete] [Delete and Lock User]

同问

张三阀阅

#4 Created at ... [Delete] [Delete and Lock User]

t[0]是名字,t[0][0]是每个名字的首字母。t[0]中Bart在Bob前面,而t[0][0]按照原顺序,Bob在Bart前面。sorted(L,key)的逻辑是把key函数依次作用在L中的每一个元素上,因此定义key函数的时候对象应该是L中的单个元素而不是整个L。

我去输出试试,t[0]是('Bob', 75),t[0][0]是 Bob ,t[0][0][0]是B ,搞糊涂了

张三阀阅

#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里的元素。

文刂呐

#7 Created at ... [Delete] [Delete and Lock User]
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

Reply