赞
踩
首先我们需要明确一点就是sorted()函数是作用于一个列表,对列表中的每一项元素进行排序,因为sorted本身的作用就是对元素排序,如果后面还有key=function ,则是先对列表中的每一项元素按照function进行作用,sorted()函数在对返回的结果(仍然是存在一个list中)在进行排序!理解了上面的逻辑我们就可以做题啦。
“假设我们用一组tuple表示学生名字和成绩:
L = [(‘Bob’, 75), (‘Adam’, 92), (‘Bart’, 66), (‘Lisa’, 88)]
请用sorted()对上述列表分别按名字排序:”
代码如下:
#请用sorted()对上述列表分别按名字排序:
def main():
L=[('Bob',98),('xuanxuan',90),('hehe',97),['Asas',100]]
L1=sorted(L,key=sort_byname)
print(L1)
def sort_byname(t): #t这里代表着一个元组tuple因为list中每一项不再是单纯的一个元素,而是一个tuple
return t[0].lower()
#return t[0]
main()
需要注意的是这里sort_byname()函数的作用对象是sorted()函数中的list的每一项,在这里也就是一个tuple了,由于我们是希望对名字进行排序,sort_byname()函数只需要对一个tuple返回第一个元素值 也就是名字 ,然后sorted()函数会对返回来的值 再进行排序,自然就是按名字排序了
如果是按照分数进行排序呢:
#还是上面那个例子,请用sorted()对上述列表按分数进行排序
def main():
L=[('Bob',98),('xuanxuan',90),('hehe',97),['Asas',100]]
L1=sorted(L,key=sort_byscore)
print(L1)
def sort_byscore(t):
return t[1]
main()
需要注意的是,如果一个函数的返回值仍然是一个函数或者函数的某种形式(比如说列表中的元素都是函数的形式等),那么只有当这个被返回的函数被调用时才会返回值。
现在通过例子说明一下啊:
返回函数,只有被返回的函数被调用时,才会计算里边参数的值
def count():
fs=[]
for i in range(1,4):
def f():
return i*i
fs.append(f)
return fs
def main():
f1,f2,f3=count() #因为count()返回的是一个list 里边的元素都是函数,f1,f2,f3就以此对应了list列表中的三个函数,
result1=f1() #只不过这三个函数只有等到自己被调用时f1()时才会返回原本保存在函数中参数的值
result2=f2()
result3=f3() #由于f()函数在定义时使用的时变化的i,因此前两次循环 fs列表中对应的元素--函数保存的并不是原来的1 和2 而是最后被更新到3
print(result1,result2,result3)
main()
需要说明一下,上面的代码运行之后返回的都是9 。
首先调用count()函数,返回的是fs,一个list 只不过这个list函数存放的元素不是普通的整数或者字符,在这里是函数f,主函数里f1,f2,f3=count() 后就会把三次循环结束的函数依次赋值给 f1,f2,f3,也就是现在他们三个仍是函数,并不是某个具体的值,而且这三个函数里保存着需要返回的参数i ,只有当f1() f2() f3()这样被调用时,才会依次返回值。
而且返回的值都是9并不是期望的1,4,9
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。