为了账号安全,请及时绑定邮箱和手机立即绑定

python元组的列表或者列表的列表,如何简单快速计算每个item的指定单元?

python元组的列表或者列表的列表,如何简单快速计算每个item的指定单元?

郎朗坤 2019-02-20 23:56:33
说的有点绕口,举个经常调用的例子: 对如下元组的list排序:students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] 使用lambda函数:sorted(students, key=lambda student : student[2]) 或者itemgetter:sorted(students, key=operator.itemgetter(2)) 很简洁,一句话。但是是建立在函数支持这样指定key的接口。 那假如我想将所有成绩求个平均值?提取所有人名打印出去? 有没有比较简洁有效的写法?感觉循环遍历访问总是有点不爽...
查看完整描述

2 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

题主不想写所谓的循环大概是指不想写显示的for while循环遍历吧。

处理一些序列,除了迭代和递归,也没有别的方法了吧。

不想用显示的for循环,写成一句话可以使用列表解析,或者使用map,filter,reduces函数式函数,或者两者配合使用

pythonIn [1]: students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
In [2]: map(lambda t: t[0], students)
Out[2]: ['john', 'jane', 'dave']

In [3]: reduce(lambda x, y: x + y, map(lambda t: t[-1], students)) / float(len(students))
Out[3]: 12.333333333333334
查看完整回答
反对 回复 2019-03-01
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

试试列表解析式?

例如说提取所有人名

>>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>> names = [ i[0] for i in students ]
>>> names
['john', 'jane', 'dave']

求平均值

>>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>> score = sum([ i[2] for i in students ])
>>> score
37
>>> score/len(students)
12.333333333333334
查看完整回答
反对 回复 2019-03-01
  • 2 回答
  • 0 关注
  • 632 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号