您现在的位置是:首页 > 文章详情

python 数据结构 list(3)

日期:2018-10-21点击:495

list解析

先看下面的例子,这个例子是想得到1到9的每个整数的平方,并且将结果放在list中打印出来

>>> power2 = [] >>> for i in range(1,10): ... power2.append(i*i) ... >>> power2 [1, 4, 9, 16, 25, 36, 49, 64, 81] 

python有一个非常有意思的功能,就是list解析,就是这样的:

>>> squares = [x**2 for x in range(1,10)] >>> squares [1, 4, 9, 16, 25, 36, 49, 64, 81] 
  • 找出100以内的能够被3整除的正整数。

我们用的方法是:

aliquot = [] for n in range(1,100): if n%3 == 0: aliquot.append(n) print aliquot 

用list解析重写,会是这样的:

>>> aliquot = [n for n in range(1,100) if n%3==0] >>> aliquot [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99] 

另一个:

>>> print range(3,100,3) [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99] 

其实,不仅仅对数字组成的list,所有的都可以如此操作。

>>> mybag = [' glass',' apple','green leaf '] #有的前面有空格,有的后面有空格 >>> [one.strip() for one in mybag] #去掉元素前后的空格 ['glass', 'apple', 'green leaf'] 

enumerate

这是一个有意思的内置函数,本来我们可以通过for i in range(len(list))的方式得到一个list的每个元素编号,然后在用list[i]的方式得到该元素。如果要同时得到元素编号和元素怎么办?就是这样了:

>>> for i in range(len(week)): ... print week[i]+' is '+str(i) #注意,i是int类型,如果和前面的用+连接,必须是str类型 ... monday is 0 sunday is 1 friday is 2 

python中提供了一个内置函数enumerate,能够实现类似的功能

>>> for (i,day) in enumerate(week): ... print day+' is '+str(i) ... monday is 0 sunday is 1 friday is 2 

实验:

>>> seasons = ['Spring', 'Summer', 'Fall', 'Winter'] >>> list(enumerate(seasons)) [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')] >>> list(enumerate(seasons, start=1)) [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')] 

在这里有类似(0,'Spring')这样的东西,这是另外一种数据类型,待后面详解。

下面将enumerate函数和list解析联合起来,同时显示,在进行list解析的时候,也可以包含进函数

>>> def treatment(pos, element): ... return "%d: %s"%(pos,element) ... >>> seq = ["hiekay","hiekay.github.io","python"] >>> [ treatment(i, ele) for i,ele in enumerate(seq) ] ['0: hiekay', '1: hiekay.github.io', '2: python'] 

函数lambda:

例如:

g = lambda x:x+1 

ambda作为一个表达式,定义了一个匿名函数,上例的代码x为入口参数,x+1为函数体,用函数来表示为:

 def g(x): return x+1 
>>> seq = ["hiekay","hiekay.github.io","python"] >>> foo = lambda i,ele:"%d:%s"%(i,ele) #lambda函数,给代码带来了简介 >>> [foo(i,ele) for i,ele in enumerate(seq)] ['0:hiekay', '1:hiekay.github.io', '2:python'] 
原文链接:https://yq.aliyun.com/articles/658997
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章