Python中sorted参数的设计

Python中的lambda函数

  1. lambda函数也叫匿名函数,即,函数没有具体的名称,而用def创建的方法是有名称的。lambda允许用户快速定义单行函数,当然用户也可以按照典型的函数定义完成函数。lambda的目的就是简化用户定义使用函数的过程。
  2. 函数定义:lambda [arguments]: expression。例如:
    log2 = lambda x:log(x) / log(2)
  3. 再例如:
  4. >>>bar=lambda :'this is a bar'
    >>>print bar
    this is a bar
    
    
    
    

python中的operator.itemgetter()和operator.attrgetter()函数

  1. 在排序时, 可以用lambda表达式将对象map成keys;例如
    students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
    sorted(students, key=lambda student : student[2])

  2. 亦可以使用operator包中的attrgetter和itemgetter函数以提高效率
    a = [1,2,3] 
    >>> b=operator.itemgetter(1)      //定义函数  b,获取对象的第1个域的值
    >>> b(a)                          //现在定义的b相当于一个运算符,现在给它一个参数a,就可以运算
    2 
    >>> b=operator.itemgetter(1,0)  //定义函数b,获取对象的第1个域和第0个的值
    >>> b(a) 
    (2, 1)
    operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),看上面例子,attrgetter则是取字典中相应键的值,看下面例子:
    # 考虑 Student 对象
    class Student:
        def __init__(self, name, grade, age):
                self.name = name
                self.grade = grade
                self.age = age
        def __repr__(self):
                return repr((self.name, self.grade, self.age))
    
    # 建立一组Student对象
    students = [
        Student('jane', 'B', 12),
        Student('john', 'A', 12),
        Student('dave', 'B', 10),
    ]
    
    from operator import itemgetter, attrgetter
    
    # 对students按照年龄排序
    print sorted(students, key=attrgetter('age'))
    # 其等价于
    print sorted(students, key=lambda o: o.age)
    # 输出: >>> [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
    
    # 亦可以按多个key排序, 先按age再按grade排序
    print sorted(students, key=attrgetter('age', 'grade'))
    # 输出: >>> [('dave', 'B', 10), ('john', 'A', 12), ('jane', 'B', 12)]



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值