1.数据结构

1.1 内置序列类型

  四种序列类型:

  1.容器序列:list、tuple和collections.deque

  2.扁平序列:str、bytes、bytearray、memoryview和array.array

  3.可变序列:list、bytearray、array.array、collections.deque 和 memoryview

  4.不可变序列:tuple、str 和 bytes

1.2 列表推导

  1.列表推导(list comprehension):列表推导是构建列表(list)的快捷方式,简洁的写法。

  列表推导的作用只有一个:生成列表。

>>> symbols = '$¢£¥€¤'
>>> codes = [ord(symbol) for symbol in symbols] # 用方括号括起来,内部用for循环生成多个值
>>> codes
[36, 162, 163, 165, 8364, 164]

  2.表达式内部的变量和赋值只在局部起作用,表达式的上下文里的同名变量还可以被正常引用,局部变量并不会影响到它们。

>>> x = 'ABC'
>>> dummy = [ord(x) for x in x]
>>> x
'ABC'
>>> dummy
[65, 66, 67]

  即 x 的值不会被列表推导中的循环中的 x 值所影响。

1.3 生成器表达式

  1.生成式表达器(generator expression):生成器表达式遵守了迭代器协议,可以逐个地产出元素,而不是先建立一个完整的列表,然后再把这个列表传递到某个构造函数里。这样更节省内存。

  生成器表达式的语法跟列表推导差不多,只不过把方括号换成圆括号而已。

  用生成器表达式初始化元组和数组:

>>> symbols = '$¢£¥€¤' # 初始化元组
>>> tuple(ord(symbol) for symbol in symbols) # 如果生成器表达式是一个函数调用过程中的唯一参数,那么不需要额外再用括号把它围起来。
(36, 162, 163, 165, 8364, 164)
>>> import array # 初始化数组
>>> array.array('I', (ord(symbol) for symbol in symbols)) # array 的构造方法需要两个参数,因此括号是必需的。array 构造方法的第一个参数,即('I')指定了数组中数字的存储方式。
array('I', [36, 162, 163, 165, 8364, 164])

1.4 笛卡尔积 

  笛卡儿积是一个列表,列表里的元素是由输入的可迭代类型的元素对构成的元组,因此笛卡儿积列表的长度等于输入变量的长度的乘积。

  1.使用列表推导计算笛卡儿积

>>> colors = ['black', 'white']
>>> sizes = ['S', 'M', 'L']
>>> tshirts = [(color, size) for color in colors for size in sizes]
>>> tshirts
[('black', 'S'), ('black', 'M'), ('black', 'L'), ('white', 'S'), ('white', 'M'), ('white', 'L')]
>>> for color in colors: # 使用for循环是一样的效果
... for size in sizes:
... print((color, size))
...
('black', 'S')
('black', 'M')
('black', 'L')
('white', 'S')
('white', 'M')
('white', 'L')
>>> tshirts = [(color, size) for size in sizes for color in colors] # 改变参数位置,输出顺序不同
>>> tshirts
[('black', 'S'), ('white', 'S'), ('black', 'M'), ('white', 'M'), ('black', 'L'), ('white', 'L')]

  2.使用生成器表达式计算笛卡儿积

>>> colors = ['black', 'white']
>>> sizes = ['S', 'M', 'L']
>>> for tshirt in ('{} {}'.format(c, s) for c in colors for s in sizes):
... print(tshirt)
...
black S
black M
black L
white S
white M
white L

流畅的python和cookbook学习笔记(一)的更多相关文章

  1. 流畅的python和cookbook学习笔记(七)

    1.读写压缩数据文件 使用 gzip 和 bz2 模块来读写压缩文件,不过需要注意文件的模式,默认格式为二进制. # 读取压缩文件 import gzip with gzip.open('somefi ...

  2. 流畅的python和cookbook学习笔记(五)

    1.随机选择 python中生成随机数使用random模块. 1.从序列中随机挑选元素,使用random.choice() >>> import random >>> ...

  3. 流畅的python和cookbook学习笔记(九)

    1.减少可调用对象的参数个数,使用functools.partial冻结参数 使用functools.partial(),可以固定一个或者多个值,减少调用参数. >>> def sp ...

  4. 流畅的python和cookbook学习笔记(八)

    1.函数的默认参数必须不可变 如果函数的默认参数为可变的对象,那么默认参数在函数外被修改也会影响到函数本身的. >>> def spam(a, b=None): # b要为不可变参数 ...

  5. 流畅的python和cookbook学习笔记(六)

    1.同时迭代多个序列(zip(函数)) 使用zip()函数可以同时迭代多个序列. >>> X = [1, 2, 3, 4, 5, 6] >>> Y = [121, ...

  6. 流畅的python和cookbook学习笔记(四)

    1.数字的四舍五入 对于简单的舍入运算,使用内置的 round(value, ndigits) 函数即可. round 函数返回离它最近的偶数.也就是说,对 1.5 或者 2.5 的舍入运算都会得到 ...

  7. 流畅的python和cookbook学习笔记(三)

    1.双向队列 collections.deque 类(双向队列)是一个线程安全.可以快速从两端添加或者删除元素的数据类型. rotate和popleft操作,rorate可以把前后元素换位.pople ...

  8. 流畅的python和cookbook学习笔记(二)

    1.元组拆包和解压序列赋值 任何的序列 (或者是可迭代对象) 可以通过一个简单的赋值语句解压并赋值给多个 变量.唯一的前提就是变量的数量必须跟序列元素的数量是一样的. 1.平行赋值: >> ...

  9. Requests:Python HTTP Module学习笔记(一)(转)

    Requests:Python HTTP Module学习笔记(一) 在学习用python写爬虫的时候用到了Requests这个Http网络库,这个库简单好用并且功能强大,完全可以代替python的标 ...

随机推荐

  1. 点击隐藏显示和点击body空白处隐藏

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. “全栈2019”Java第十五章:Unicode与转义字符

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  3. 一分钟了解 TCP/IP 模型

    原文讲的不是特别细,为了便于理解,我颠倒了顺序. 写在开始 我们需要知道协议到底是什么. 在网络上,一个协议对应于管理系统之间如何相互通信的规则. 然后我们需要知道什么是协议族. 一个协议族是一系列协 ...

  4. spring的包大概作用(备忘)

    1.spring.jar 是包含有完整发布模块的单个jar 包. 2. org.springframework.aop 包含在应用中使用Spring的AOP特性时所需的类. 3. org.spring ...

  5. css3里面的-webkit-transition

    css3里面的-webkit-transition (1)-webkit-transition-timing-function 可以定义动画的变化时间曲线-webkit-transition-timi ...

  6. Web App三年将取代原生App?

    从技术角度讲,html5现在是可以获取很多用户的资源,上传提交服务器,与用户进行交互.但是你可以观察一下PC或Mac,web网页发展了这么长时间了,取代了客户端了吗? 对于现在而言,html5虽已可以 ...

  7. 新公司,环境搭建,windows上的坑

    1 在windows上安装nodejs环境,node -v 后可以看到版本号 2 在windows上安装nvm管理node的版本,可以对node版本自由切换,使用5.3.0版本的node 3 在win ...

  8. 动手玩转Docker(二)

    CentOS7下安装docker: 通过命令uname -r 查看linux内核版本,版本低的话不支持docker. [tim@num root]$ uname -r 3.10.0-514.el7.x ...

  9. 集合之五:Set接口

    set接口的简单介绍 set接口在API中的说明是:一个不包含重复元素的 collection.更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 ...

  10. Python多继承解析顺序的C3线性算法流程解析

    Python多继承MRO 在Python2.1中,采用了经典类,使用深度优先算法解析. Python2.2中,引入了新式类,使用深度优先算法和广度优先算法. 在Python2.3以后的版本中,经典类和 ...