`
54yuri
  • 浏览: 27361 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Python的lambda函数与排序

阅读更多
Python的lambda函数与排序
2008-06-19 23:13:34 by deepblue
前几天看到了一行求1000的阶乘的Python代码:

print   reduce(lambda   x,y:x*y,   range(1,   1001))

一下子被python代码的精简与紧凑所折服,故对代码进行了简单的分析。

reduce与range都是Python的内置函数。

range(1,1001)表示生成1到1000的连续整数列表(List)。

reduce(functionA,iterableB),functionA为需要两个变量的函数,并返回一个值。iterableB为可迭代变量,如List等。reduce函数将B中的元素从左到右依次传入函数A中,再用函数A返回的结果替代传入的参数,反复执行,则可将B reduce成一个单值。在此,是将1到1000的连续整数列表传入lambda函数并用两个数的积替换列表中的数,实际的计算过程为:(...((1×2)×3)×4)×...×1000),最后的结果即1000的阶乘。

下面来介绍一下lambda函数。

lambda函数是一种快速定义单行的最小函数,是从 Lisp 借用来的,可以用在任何需要函数的地方。下面的例子比较了传统的函数与lambda函数的定义方式:

>>> def f(x,y):
...     return x*y
...    
>>> f(2,3)

>>> g = lambda x,y: x*y
>>> g(2,3)


可以看到,两个函数得到的结果一样,而对于实现简单功能的函数来说,使用lambda函数来定义更加精简灵活,还可以直接把函数赋值给一个变量,用变量名来表示函数名。

其实lambda函数在很多时候都是不需要赋值给一个变量的(如前文中求阶乘的过程)。
使用lambda函数还有一些注意事项:
lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。
lambda 函数不能包含命令,包含的表达式不能超过一个。
下面简单演示一下如何使用lambda函数实现自定义排序。
 class People:
     age=0
     gender='male'
 
     def __init__(self, age, gender):  
         self.age = age  
         self.gender = gender
     def toString(self):
         return 'Age:'+str(self.age)+'\tGender:'+self.gender

 List=[People(21,'male'),People(20,'famale'),People(34,'male'),People(19,'famale')]
 print 'Befor sort:'
 for p in List:
     print p.toString()
 
 List.sort(lambda p1,p2:cmp(p1.age,p2.age))
 print '\nAfter ascending sort:'
 for p in List:
     print p.toString()
 
 List.sort(lambda p1,p2:-cmp(p1.age,p2.age))
 print '\nAfter descending sort:'
 for p in List:
     print p.toString()


上面的代码定义了一个People类,并通过lambda函数,实现了对包含People类对象的列表按照People的年龄,进行升序和降序排列。运行结果如下:

Befor sort:
Age:21    Gender:male
Age:20    Gender:famale
Age:34    Gender:male
Age:19    Gender:famale

After ascending sort:
Age:19    Gender:famale
Age:20    Gender:famale
Age:21    Gender:male
Age:34    Gender:male

After descending sort:
Age:34    Gender:male
Age:21    Gender:male
Age:20    Gender:famale
Age:19    Gender:famale


参考资料:
http://www.woodpecker.org.cn/diveintopython/power_of_introspection/lambda_functions.html
http://docs.python.org/lib/built-in-funcs.html


from http://ipie.blogbus.com/logs/23243382.html
分享到:
评论

相关推荐

    详解Python的Lambda函数与排序

    本篇文章主要是介绍了Python的Lambda函数与排序,简单的介绍了Lambda函数的用法和排序,有需要的朋友可以了解一下。

    Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法

     lambda表示的是匿名函数. 不需要用def来声明, 一句话就可以声明出一个函数  语法:  函数名 = lambda 参数: 返回值  注意:  1. 函数的参数可以有多个. 多个参数之间用逗号隔开  2. 匿名函数不管多复杂. 只能...

    Python3中`sorted()函数`与`lambda表达式`原理解析

    Python3中sorted()函数与lambda表达式原理解析 相信很多小伙伴们在一开始学习Python的一些高级用法时遇到过很多困扰。 我准备日常分享一些比较浅显的原理解析帮助大家理解。 博主的原文: lambda表达式 sorted()函数...

    Python使用lambda表达式对字典排序操作示例

    本文实例讲述了Python使用lambda表达式对字典排序操作。分享给大家供大家参考,具体如下: lambda表达式也常用于字典排序,既然写到字典排序,那就把按键排序和按值排序都写写好了。 字典按键排序 显然按键排序,...

    Python判断列表是否已排序的各种方法及其性能分析

    本文基于Python2.7语言,给出判断列表是否已排序的多种方法,并在作者的Windows XP主机(Pentium G630 2.7GHz主频2GB内存)上对比和分析其性能表现。 一. 问题提出 Haskell培训老师提出一个问题:如何判断列表是否...

    Python sorted函数详解(高级篇)

    sorted 用于对集合进行排序(这里集合是对可迭代对象的一个统称,他们可以是列表、字典、set、甚至是字符串),它的功能非常强大 1、对列表排序,返回的对象不会改变原列表 list = [1,5,7,2,4] sorted(list) Out[87...

    python ip地址排序算法2.0

    重写了原来的ip地址排序算法,可扩充到任意分组排序,同时组间排序。采用了map,lambda和递归函数,计算时间可大幅提交,逻辑比较清晰,如果还可以简化,请大神指导,谢谢

    Python实现按中文排序的方法示例

    本文实例讲述了Python实现按中文排序的方法。分享给大家供大家参考,具体如下: 安装中文库 sudo apt-get update sudo apt-get install language-pack-zh-hans-base sudo dpkg-reconfigure locales 使用 import ...

    python面试题(四).pdf

    python⾯试题(四) python⾯试题(四) 1、举例sort和sorted对列表排序,list=[0,-1,3,-10,5,9] 2、对list排序foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4],使⽤lambda函数从⼩到⼤排序 3、使⽤lambda函数对list排序foo = ...

    Python字典排序与取值

    前言 一个非本专业的坑货,让我帮做的一道Python题,还很无chi 的那啥希望我帮写注释,简直不能忍 (〃´皿`)q… ... dict_sort=sorted(stock_dict.items(),key=lambda item:item[1]) #排序后得到的di

    Python中的sort()方法使用基础教程.pdf

    (2)cmp为函数,指定排序时进⾏⽐较的函数,可以指定⼀个函数或者lambda函数,如: students为类对象的list,没个成员有三个域,⽤sorted进⾏⽐较时可以⾃⼰定cmp函数,例如这⾥要通过⽐较第三个数据 成员来排序,...

    python3 -sorted函数 对所有可迭代的对象进行排序操作 sorted(corr_list,key=lambda x: -abs(x[0]))

    sorted() 函数对所有可迭代的对象进行排序操作。返回重新排序的列表。 sort 与 sorted 区别: sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操 作。 list 的 sort 方法返回的是对已经存在的...

    Python中的匿名函数和函数式编程

    Python中的匿名函数,称为lambda表达式 匿名函数的格式: lambda argument1, argument2,... argumentN : expression # 关键字 参数 : 返回值 比如,计算平方 square = lambda x: x**2 square(3) # 对字典中的key/...

    python list多级排序知识点总结

    在python3的sorted中去掉了cmp参数,转而推荐“key+lambda”的方式来排序。 如果需要对python的list进行多级排序。有如下的数据: list_num = [[12,3],[18,34],[18,10],[12,45],[18,10],[8,34]] 需要从小到大的排序...

    Python常见排序操作示例【字典、列表、指定元素等】

    本文实例讲述了Python常见排序操作。分享给大家供大家参考,具体如下: 字典排序 按value排序 d1 = {"name":"python","bank":"icbc","country":china} # reverse是否倒序,x[1]代表value,x[0]为key d1 = sorted(d1....

    python 使用值来排序一个字典的方法

    下面先看下python 使用值排序字典的方法 In [8]: a={'x':11,'y':22,'c':4} In [9]: import operator In [10]: sorted(a.items(),key=operator.itemgetter(1)) Out[10]: [('c', 4), ('x', 11), ('y', 22)] In [11]: ...

    python 字典(dict)按键和值排序

    python 字典(dict)的特点就是无序的,按照键(key)来提取相应值(value),如果我们需要字典按值排序的话,那可以用下面的方法来进行: 1 下面的是按照value的值从大到小的顺序来排序。 dic = {'a':31, 'bc':5, ...

    Python自定义类的数组排序实现代码

    数组productlist中存储的是自定义类Product,Product有一个方法是返回商品的价格,于是对productlist按照Product的价格从低到高进行排序,仅需要如此简单的一行代码即可实现。 Python真的是一门简洁而强大的语言,...

Global site tag (gtag.js) - Google Analytics