主页  范文大全   设计学院   SEO研究   免费资源   网赚大全  QQ资源区    电影下载  在线电影   短信&笑话   校内网   理财知识   站长Blog   访客留言   顶级QQ百科

         声明:本站所有资料素材均是由站长精心整理搜集的,属于原创。我们同意您的转载和复制,但是在转载复制时请保留文字出处。本站资料全部免费使用,无需注册,力求打造华北最强最大的免费资源网站。

最初表推导式通过功能性程序设计语言Haskell而普及它为们提供了一种使用Python语言编码的不同方法它可以让们将重心放在要转换的数据而不是使用功能

使用表推导式完成的所有任务都可以使用内建的映像和过滤函数完成但是表推导式为们提供了一个更容易使用和更易于理解语法本文们将通过几个简单的例子来向大家介绍表推导式功能

当在Python中指定一个列表时们需要将所有表项列举出来,并用中括号包围起来如下所示:

>>> wordlist = 'HELLO', 'World', 'how', 'aRe', 'YOU?'

当使用表推导式时,除了不用列举各个表项内容之外方法基本一样们使用另外一个列表转换来描述列表内容让我们举个例子来看一下:们想要获得单词列表并将它们转换成小写通常们会使用下面方式完成:

>>> l =

>>> for word in wordlist:

l. append(word.lower())

>>> l

'hello', 'world.', 'how', 'are', 'you?'

但是,这样写太长了而且很慢因为当们使用for语句时Python需要完成潜在循环如果们使用功能性编程可以这样编码实现:

>>> import string

>>> map(string.lower,wordlist)

'hello', 'world.', 'how', 'are', 'you?'

这是一个改进但是有点模糊通过使用表推导式方法代替可以这样来写:

>>> word.lower() for word in wordlist

'hello', 'world.', 'how', 'are', 'you?'

第二种写法长度并没有减少但是在很多情况下更清楚一些你可以决定那种方法更适合你环境

表推导式还可以完全代替内建的过滤函数,例如如果你只想取出列表中已经是小写字母单词就可以这样编码:

>>> word for word in wordlist if world.islower()

'how'

映像和过滤函数是功能性程序设计的基础,在使用表推导式时们可以以直接的方式使用其中一个函数或同时使用这两个函数如果们想在一个表达式中同时使用映像和过滤函数,这很简单如下面例子所示:

>>> word.lower() for word in wordlist if not world.islower()

'hello', 'world.', 'are', 'you?'

还可以在第一部分嵌套使用表推导式如下所示:

>>> vowels = 'a','A','e','E','i','I','o','O','u','U'

>>> letter for letter in word if letter not in vowelsfor word in wordlist

'H', 'L', 'L', 'W', 'r', 'l', 'd', 'h', 'w', 'R', 'y', '?'

或者在后半部分使用嵌套,将多个转换连接在一起如下所示:

>>> a.lower() for a in bifor b in x for i in range(len(b))
'h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd', 'h', 'o', 'w', 'a', 'r', 'e', 'y', 'o', 'u', '?'

正如我们所看到的们开始将多个表推导式连接在一起时候问题就变得复杂了因此,当在一个表达式中有多个表推导式时将不同条件分解成多行书写是一个好主意虽然我们并不总是需要嵌套使用表推导式但是如果们只是需要迭代使用多个列表们就可以将它们包含在一个表推导式中

在下面的例子中们想要生成所有参加宴会的嘉宾置换就可以简单地使用一个表推导式完成该任务

>>> guests = 'Chris', 'Brendan', 'Jimmy', 'Mel', 'Mike', 'Jess'
>>> (seat1, seat2) for seat1 in guests for seat2 in guests if seat1 != seat2
('Chris', 'Brendan'), ('Chris', 'Jimmy'), ('Chris', 'Mel'), ('Chris', 'Mike'), ('Chris', 'Jess'), ('Brendan', 'Chris'), ('Brendan', 'Jimmy'), ('Brendan', 'Mel'), ('Brendan', 'Mike'), ('Brendan', 'Jess'), ('Jimmy', 'Chris'), ('Jimmy', 'Brendan'), ('Jimmy', 'Mel'), ('Jimmy', 'Mike'), ('Jimmy', 'Jess'), ('Mel', 'Chris'), ('Mel', 'Brendan'), ('Mel', 'Jimmy'), ('Mel', 'Mike'), ('Mel', 'Jess'), ('Mike', 'Chris'), ('Mike', 'Brendan'), ('Mike', 'Jimmy'), ('Mike', 'Mel'), ('Mike', 'Jess'), ('Jess', 'Chris'), ('Jess', 'Brendan'), ('Jess', 'Jimmy'), ('Jess', 'Mel'), ('Jess', 'Mike')

这并不要替换程序中的每一个部分只需要在你Python工具箱里面添加一个表推导式即可然后很快就可以看到它能够使你程序比以前变得更短小、更清晰、更快速因为它们重心在于数据而不是过程,而且他们很容易编写即使当你需求很复杂时也一样

教程录入:xxYsh.com    责任编辑:admin 
发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口

推荐链接