登录

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

说的有点绕口,举个经常调用的例子:
对如下元组的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的接口。
那假如我想将所有成绩求个平均值?提取所有人名打印出去?
有没有比较简洁有效的写法?感觉循环遍历访问总是有点不爽...

# Python
大家讲道理大家讲道理2178 天前489 次浏览

全部回复(2) 我要回复

  • 黄舟

    黄舟2017-04-17 15:22:41

    题主不想写所谓的循环大概是指不想写显示的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
    

    回复
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 15:22:41

    试试列表解析式?

    例如说提取所有人名

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

    回复
    0
  • 取消回复发送