说的有点绕口,举个经常调用的例子:对如下元组的list排序:students=[('john','A',15),('jane','B',12),('dave','B',10)]使用lambda函数:sorted(students,key=lambdastudent:student[2])或者itemgetter:sorted(students,key=operator.itemgetter(2))很简洁,一句话。但是是建立在函数支持这样指定key的接口。那假如我想将所有成绩求个平均值?提取所有人名打印出去?有没有比较简洁有效的写法?感觉循环遍历访问总是有点不爽...
2 回答
噜噜哒
TA贡献1784条经验 获得超7个赞
题主不想写所谓的循环大概是指不想写显示的forwhile循环遍历吧。处理一些序列,除了迭代和递归,也没有别的方法了吧。不想用显示的for循环,写成一句话可以使用列表解析,或者使用map,filter,reduces函数式函数,或者两者配合使用pythonIn[1]:students=[('john','A',15),('jane','B',12),('dave','B',10)]In[2]:map(lambdat:t[0],students)Out[2]:['john','jane','dave']In[3]:reduce(lambdax,y:x+y,map(lambdat:t[-1],students))/float(len(students))Out[3]:12.333333333333334
莫回无
TA贡献1865条经验 获得超7个赞
试试列表解析式?例如说提取所有人名>>>students=[('john','A',15),('jane','B',12),('dave','B',10)]>>>names=[i[0]foriinstudents]>>>names['john','jane','dave']求平均值>>>students=[('john','A',15),('jane','B',12),('dave','B',10)]>>>score=sum([i[2]foriinstudents])>>>score37>>>score/len(students)12.333333333333334
添加回答
举报
0/150
提交
取消