文档章节

Python的点滴笔记之:推导式

fzyz_sb
 fzyz_sb
发布于 2015/02/24 15:33
字数 282
阅读 57
收藏 0

1. 推导式通常可转换为for循环

    简单的for循环通常可以使用推导式来替换:

>>> [(x, y) for x in [1, 2, 3] for y in [3, 1, 4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
    它实际上等价于:
>>> combs = []
>>> for x in [1, 2, 3]:
	for y in [3, 1, 4]:
		if x != y:
			combs.append((x, y))

			
>>> combs
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

2. 推导式往往可完成复杂的for循环表示(不推荐)

    以下代码将逆转一个矩阵:

>>> matrix = [
	[1, 2, 3, 4],
	[5, 6, 7, 8],
	[9, 10, 11, 12],
	]
>>> [[row[i] for row in matrix] for i in range(4)]
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
它可以先被分解为:

>>> transposed = []
>>> for i in range(4):
	transposed.append([row[i] for row in matrix])

	
>>> transposed
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
进一步被分解为:

>>> transposed = []
>>> for i in range(4):
	transposed_row = []
	for row in matrix:
		transposed_row.append(row[i])
	transposed.append(transposed_row)

	
>>> transposed
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
    但实际上用zip函数也可以达到同样的效果:

>>> zip(*matrix)
[(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]



© 著作权归作者所有

共有 人打赏支持
fzyz_sb
粉丝 408
博文 209
码字总数 447144
作品 0
武汉
程序员
Supporting Python 3(支持python3)——使用现代的风格改善你的代码

使用现代风格改善你的代码 原文: http://python3porting.com/improving.html 译者: TheLover_Z 一旦你开始使用 Python 3,你就有机会接触新的特性来改善你的代码。这篇文章中提到的很多东西...

在湖闻樟
2015/10/26
0
0
Python 函数 类 语法糖

Python 语法糖 ,换行连接 while,for 循环外的 else 如果 while 循环正常结束(没有break退出)就会执行else。 zip() 并行迭代 列表推导式 字典推导式 { keyexp : valueexp fro expression...

zzir
2016/08/13
0
0
Python迭代器生成器,私有变量及列表字典集合推导式(二)

1 python自省机制 这个是python一大特性,自省就是面向对象的语言所写的程序在运行时,能知道对象的类型,换句话说就是在运行时能获取对象的类型,比如通过 type(),dir(),getattr(),hasattr(),i...

善良小郎君
06/11
0
0
python学习笔记(五)——语句

               语句(条件、循环和其他语句)   之前一直在学习数据结构,单纯的结构并不能做什么事,只有组成语句之后才能实现比较复杂的功能,和其他语言一样,条件、循...

zhoujie0111
2013/04/08
0
0
一文带你了解Python集合与基本的集合运算

选自DataCamp,作者:Michael Galarnyk,机器之心编译。 一般我们熟悉 Python 中列表、元组及字典等数据结构,但集合可能用得稍微少一点。但集合独特的元素唯一性与 O(1) 时间复杂度的成员检...

机器之心
06/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

TypeScript基础入门之声明合并(二)

转发 TypeScript基础入门之声明合并(二) 声明合并 合并命名空间 与接口类似,同名的命名空间也将合并其成员。 由于名称空间同时创建了名称空间和值,因此我们需要了解它们是如何合并的。 要合...

durban
9分钟前
0
0
centos7系统安装sersync+rsync实现服务器同步功能

centos7系统安装sersync+rsync实现服务器同步功能 MQ_douer0人评论21708人阅读2017-04-08 15:49:03 一、为什么要用sersync+rsync架构? 1、sersync是基于inotify开发的,类似于inotify-tools...

linjin200
9分钟前
1
0
Windows下安装phpRedis扩展

Windows下安装phpRedis扩展 通常在做PHP程序测试时,会用到Redis。而一般测试都是在Windows下进行的,所以需要在Windows环境下安装phpRedis扩展,用以支持php对Redis的访问。 工具/原料 php调...

梦梦阁
14分钟前
1
0
HTTPConnectionPool(host:XX)Max retries exceeded with url 解决方法

HTTPConnectionPool(host:XX)Max retries exceeded with url 解决方法 在做双十一压测时,高并发调用requests时报错.问题解决方法 问题原因 是因为在每次数据传输前客户端要和服务器建立TCP...

_Change_
19分钟前
0
0
iosdfgh

复制 IO流 (***** 了解 *****) 1.1 概述 之前我们学习了 File 类,这个类中有很多操作文件本身的方法, File类它只能操作文件或文件夹,并不能去访问文件中的数据。真正保存数据的是文件,数据...

码农屌丝
20分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部