python元组的列表或者列表的列表,如何简单快速计算每个item的指定单元?
大家讲道理
大家讲道理 2017-04-17 15:20:41
0
2
690

说的有点绕口,举个经常调用的例子:
对如下元组的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)
黄舟

題主不想寫所謂的迴圈大概是指不想寫顯示的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
伊谢尔伦

試試看列表解析式?

例如說提取所有人名

>>> 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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板