Loading...
网友提供的内容

用lambda语法漂亮地实现python数组遍历

今天写了一个简单的python脚本,经过朋友提醒,发现能使用lambda语法来使语句更加直观和便于阅读。当然,我学语言一般是从使用开始,所以语言的完整教材我是从没有看过的,也许这个用法在教材里已经说过了。

比如,我们有这样一个问题。有一个数组A = 1,2,3,4,5,6,7。我们想根据该数组生成一个新的数组B,使其包含数组A里的所有奇数。那么我们普通的做法可能是:

>>> arrayA = [1,2,3,4,5,6,7]
>>> arrayB = []
>>> for number in arrayA:
        if number % 2:
            arrayB.append(number)

>>> print arrayB
[1, 3, 5, 7]
>>> 

而lambda语法能大大地优化这个写法。lambda语法其实就是一种用来临时定义函数对象的方法,根据这种语法,我们不需要费事地去重新定义一个函数,而直接就可以用一个表达式来表示一个未命名的函数。让我们看看用lambda语法如何写这段程序吧:

>>> arrayA = [1,2,3,4,5,6,7]
>>> arrayB = [ number for number in arrayA if number % 2 ]
>>> print arrayB
[1, 3, 5, 7]
>>> 

是不是优雅多了?我们把这段代码用括号分成三个部分:

(number) (for number in arrayA) (if number % 2)

第一部分,表面我们的新数组的元素表示为number;第二部分,是说number是取之于数组arrayA的遍历;第三部分,是说是否产生该元素的条件,也就是说当number取2的摸为非0数的时候(也就是奇数),我们选取该number。

了解了这个语法后,我们可以轻松写出一些稍为复杂点的逻辑。

比如,我们有4个人的资料:

>>> person1 = {
	'surname':     'Wang',
	'givename':    'Shawn',
	'age':         16
	}
>>> person2 = {
	'surname':     'Lee',
	'givename':    'How',
	'age':         20
	}
>>> person3 = {
	'surname':     'Lao',
	'givename':    'Suo',
	'age':         25
	}
>>> person4 = {
	'surname':     'Lao',
	'givename':    'Shi',
	'age':         10
	}

这四个人都想去观看成人电影,我们把他们放到一个数组里:

>>> people_who_want_to_watch_av_film = [
	person1, person2, person3, person4
	]

然后,我们检查他们的年龄,产生能够观看的人员的列表,并打印出来:

>>> people_who_can_watch_av_film = [
	'Hi, %s %s, you can watch av!' % (person['surname'], person['givename'])
	for person in people_who_want_to_watch_av_film
	if person['age'] >= 18
	]
>>> for words in people_who_can_watch_av_film: print words

Hi, Lee How, you can watch av!
Hi, Lao Suo, you can watch av!
>>> 

最后,我要严重声明,该例子纯属虚构,如有雷同,纯属巧合!

相关文章

  1. 对Python datetime对象进行按月为单位的增减
  2. 在Linux下解压zip文件
  3. Py++ 里定义模板实例类名字的方法
  4. 为UltraEdit添加Python语法高亮显示
  5. [译]三个有用的python方法:dir, help 和 pprint

站内评论

  • 暂无评论
  • 评论: