文档章节

零基础学python-19.4 为什么要在意列表解析与序列映射函数map

raylee2015
 raylee2015
发布于 2015/10/21 08:10
字数 677
阅读 0
收藏 0

这一章节我们来讨论一下为什么要在意列表解析与序列映射函数map,也就是为什么要有前面的几个章节?

答案:就是对于迭代序列,每一个序列的对象只进行一种操作,它能够提供精简的代码


我们下面举两个例子:

1.去掉每一行的换行符

>>> [item for item in open('output_file.txt')]
['aaaaa\n', 'bbbbb\n', 'accccc\n', 'ddddd\n', 'afffff']
>>>

上面的例子是不是非常的熟悉呢?其实我们在前面的列表解析初探的时候已经出现过,现在再一次引用,我们现在需要的操作是每一行去掉换行符

下面我们提供几种实现方法:

* 使用列表解析:

>>> [item.rstrip() for item in open('output_file.txt')]
['aaaaa', 'bbbbb', 'accccc', 'ddddd', 'afffff']

>>> [line.rstrip() for line in open('output_file.txt').readlines()]
['aaaaa', 'bbbbb', 'accccc', 'ddddd', 'afffff']
>>>

* 使用map:

>>> list(map(lambda line:line.rstrip() , open('output_file.txt')))
['aaaaa', 'bbbbb', 'accccc', 'ddddd', 'afffff']
>>>
>>> def test(line):
	return line.rstrip()

>>> list(map(test,open('output_file.txt')))
['aaaaa', 'bbbbb', 'accccc', 'ddddd', 'afffff']
>>>

* 使用for循环

>>> def test():
	res=[]
	for line in open('output_file.txt'):
		res.append(line.rstrip())
	return res

>>> test()
['aaaaa', 'bbbbb', 'accccc', 'ddddd', 'afffff']
>>>

上面三种方法,我们从两个方面评判:

* 可读性:3>1>2

* 性能:1>2>3

这种时候我们就需要从实际当中出发,调研我们的应用里面究竟需要哪种实现。

当然,笔者认为,在当今的应用当中,除了像互联网公司的那种高并发应用才追求性能,对于一般的应用,可读性比性能来的更加重要,毕竟对于一般应用,薄弱环节在于人,而不在于性能。


2.读取sql数据的属性

由于python的标准sql返回对象是这种形式:列表嵌套元组,列表就是表,元组就是行,对象就是列

返回的对象:

>>> obj=[('ray','16','man'),('jack','20','man'),('rose','22','woman')]
>>>

我们下面还是使用三种方法读取里面的名字属性

* 使用列表解析:

>>> obj=[('ray','16','man'),('jack','20','man'),('rose','22','woman')]
>>> [name for (name,age,sex) in obj]
['ray', 'jack', 'rose']
>>>

* 使用map:

>>> obj=[('ray','16','man'),('jack','20','man'),('rose','22','woman')]
>>> list(map(lambda row:row[0],obj))
['ray', 'jack', 'rose']
>>>

* 使用for循环

>>> obj=[('ray','16','man'),('jack','20','man'),('rose','22','woman')]
>>> def test(obj):
	res=[]
	for line in obj:res.append(line[0])
	return res

>>> test(obj)
['ray', 'jack', 'rose']
>>>


总结:这一章节我们举例说明了为什么要在意列表解析与序列映射函数map,还有一些注意的地方。


这一章节就说到这里,谢谢大家

------------------------------------------------------------------

点击跳转零基础学python-目录


版权声明:本文为博主原创文章,未经博主允许不得转载。

本文转载自:http://blog.csdn.net/raylee2007/article/details/48711645

共有 人打赏支持
raylee2015
粉丝 6
博文 265
码字总数 44224
作品 0
江门
私信 提问
Python基础总结成千行代码,让Python入门更简单!

只要学会这千行代码,不管你是零基础还是弱基础或是没有接触过编程,都可以快速入门Python!当时我就不信邪啊,等我看完之后,即使作为一个Python老鸟了,还是领会到了很多教授他的独特见解!...

糖宝lsh
09/10
0
0
Python for循环的替代

首先,让我们退一步看看在写一个for循环背后的直觉是什么: 遍历一个序列提取出一些信息 从当前的序列中生成另外的序列 写for循环已经是我的第二天性了,因为我是一个程序员 幸运的是,Pytho...

阿豪boy
02/07
0
0
Python 2 和 Python 3 主要区别有哪些(一)?

Guido(Python之父,仁慈的独裁者)在设计 Python3 的过程中,受一篇文章 “Python warts” 的影响,决定不向后兼容,否则无法修复大多数缺陷。---摘录自《流畅的Python》 你可能从来没有听说...

liuzhijun
2017/08/02
0
0
如何用十分钟学会函数式 Python?

函数式编程到底是什么?本文将详解其概念,同时分享怎样在 Python 中使用函数式编程。主要内容包括列表解析式和其他形式的解析式。 函数式模型 在命令式模型中,执行程序的方式是给计算机一系...

CSDN资讯
09/22
0
0
python lambda函数

python允许用lambda来创建匿名函数,匿名是因为不需要以标准的方式来声明,而def创建的方法是有名称的,它们主要有2个地方不一样 1.lambda表达式返回可调用的函数对象.但不会把这个函数对象赋给...

乐晨
2013/04/12
0
3

没有更多内容

加载失败,请刷新页面

加载更多

剖析Elasticsearch的IndexSorting:一种查询性能优化利器

摘要: 前言 前两周写过一篇《基于Lucene查询原理分析Elasticsearch的性能》,在最后留了一个彩蛋,说下一篇会介绍一种可以极大的优化查询性能的技术。本文就来介绍这种技术——IndexSortin...

阿里云官方博客
33分钟前
1
0
Go 使用channel控制并发

前言 channel一般用于协程之间的通信,channel也可以用于并发控制。比如主协程启动N个子协程,主协程等待所有子协程退出后再继续后续流程,这种场景下channel也可轻易实现。 场景示例 总结 ...

恋恋美食
59分钟前
3
0
斐波那契堆的理解,节点mark属性和势函数

斐波那契堆 看了好多博客,都是照搬算法导论的内容,没有自己的理解,比如为什么有mark属性,势函数的作用,以及为什么叫斐波那契堆,下面说说鄙人的理解。 势函数 势函数是根节点个数加上2...

杨喆
今天
7
0
NIO源码详解

阻塞io和无阻塞io: 阻塞io是指jdk1.4之前版本面向流的io,服务端需要对每个请求建立一堆线程等待请求,而客户端发送请求后,先咨询服务端是否有线程相应,如果没有则会一直等待或者遭到拒 ...

沉稳2018
今天
2
0
如何把已经提交的commit, 从一个分支放到另一个分支

在本地master提交了一个commit(8d85d4bca680a5dbcc3e5cfb3096d18cd510cc9f),如何提交的test_2分之上? git checkout test_2git cherry-pick 8d85d4bca680a5dbcc3e5cfb3096d18cd510cc9f......

stephen_wu
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部