欢迎访问个人网站:www.comingnext.cn

1. 关于Python内置序列类型

a. 按能否存放不同类型的数据区分

容器序列:

list、tuple 和collections.deque这些序列能存放不同类型的数据

扁平序列:

str、bytes、bytearray、memoryview和array.array,这类序列只能容纳一种类型。

b. 按能否被修改来分类

可变序列:

list、bytearray、array.array、collections.deque 和 memoryview。

不可变序列:

tuple、str 和 bytes。

最重要也是最基础的Python内置序列就是列表(list),list既是一个容器序列,也是一个可变序列。

2. Python的列表

a. 列表的方法

列表有很多的方法,以下取自官方文档:

list.append(x) 
将项目添加到列表的末尾。相当于 a[len(a):] = [x].

list.extend(L) 
通过附加给定列表中的所有项目来扩展列表。相当于 a[len(a):] = L.

list.insert(i, x) 在给定位置插入项目。第一个参数为被插入元素的位置索引,因此 a.insert(0, x) 在列表头插入值, a.insert(len(a), x)相当于 a.append(x).

list.remove(x) 从列表中删除值为x的第一个项目。如果没有这样的项目是一个错误。

list.pop([i]) 删除列表中给定位置的项目,并返回。如果没有给定位置,a.pop()将会删除并返回列表中的最后一个元素。(方法声明中i周围的方括号表示参数是可选的,而不是您应在该位置键入方括号。您将在Python库参考中频繁地看到此符号。)

list.clear()
从列表中删除所有项目。相当于 del a[:].

list.index(x)
返回值为x的第一个项目的列表中的索引。如果没有这样的项目是一个错误。

list.count(x)
返回x出现在列表中的次数。

list.sort(key=None, reverse=False) 排序列表中的项 (参数可被自定义, 参看 sorted() ).

list.reverse()
列表中的元素按位置反转。

list.copy()
返回列表的浅副本。相当于 a[:].

b. 用法示例

列表作为栈使用:

>>> x = [1,2,3,4,5]
>>> x.append(6)
>>> x
[1, 2, 3, 4, 5, 6]
>>> x.pop()
6
>>> x
[1, 2, 3, 4, 5]

列表作为队列使用:

>>> from collections import deque # 若要实现一个队列, collections.deque 被设计用于快速地从两端操作。
>>> queue = deque(x)
>>> queue
deque([1, 2, 3, 4, 5])
>>> queue.append(6)
>>> queue
deque([1, 2, 3, 4, 5, 6])
>>> queue.popleft()
1
>>> queue.pop()
6
>>> queue
deque([2, 3, 4, 5])

3.列表推导式

a.普通列表

列表推导式是Python构建新列表的一个快捷方式。
最简单的一个用法:

>>> chars = 'ABCD'
>>> list = []
>>> for char in chars:
... list.append(char)
...
>>> list
['A', 'B', 'C', 'D']

或者是这种方法:

>>> chars = 'ABCD'
>>> list = [char for char in chars]
>>> list
['A', 'B', 'C', 'D']

对于学过Python的人来说,第二种更具有可读性,而且代码比较简洁,同时第二种也更具Python风格。因此更加推荐第二种写法

b.笛卡儿积

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

>>> cross = [(x,y) for x in range(4) for y in range(4)]
>>> cross
[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3),
(2, 0), (2, 1), (2, 2), (2, 3), (3, 0), (3, 1), (3, 2), (3, 3)]
>>> 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')]
>>> tshirts = [(color,size) for size in sizes
... for color in colors]
>>> tshirts
[('black', 'S'), ('white', 'S'), ('black', 'M'), ('white', 'M'), ('black', 'L'), ('white', 'L')]
>>>

4.生成器表达式

如果想生成其他类型的序列,生成器表达式就派上了用场。

虽然也可以用列表推导来初始化元组、数组或其他序列类型,但是生成器表达式是更好的选择。这两者最大的不同就是生成器表达式背后遵守了迭代器协议,可以逐个地产出元素,而不是先建立一个完整的列表,然后再把这个列表传递到某个构造函数里。这种方式显然能够节省内存。

生成器表达式的语法跟列表推导差不多,只不过把方括号换成圆括号而已(接上面):

>>> tshirts = ((color, size) for color in colors for size in sizes)
>>> tshirts
<generator object <genexpr> at 0x00000245FC9D40A0>
>>> print(tshirts)
>>> for tshirt in tshirts:
... print(tshirt)
...
('black', 'S')
('black', 'M')
('black', 'L')
('white', 'S')
('white', 'M')
('white', 'L')

通过这个例子可以看出,生成器表达式得到的tshirts是一个generator,而上一个例子中,列表推导式生成的是一个list,差别仅在于此处是(),而上一处是[]。
在本例中,tshirts是一个生成器对象,可迭代。生成tshirts的时候,不会在内存中留下一个列表,因此打印出来是 at 0x00000245FC9D40A0>,而在每次for循环运行时才生成一个组合,这样才能打印出它的内容,因此你也可以选择只打印出其中的某些数据而不必全部打出。换句话说,它是用到的时候才生成内容的,当数据比较大的时候,生成器表达式能明显的节约内存。

Python学习笔记2:构造序列:列表推导和生成器表达式的更多相关文章

  1. python 全栈开发,Day14(列表推导式,生成器表达式,内置函数)

    一.列表生成式 生成1-100的列表 li = [] for i in range(1,101): li.append(i) print(li) 执行输出: [1,2,3...] 生成python1期 ...

  2. Python学习笔记(迭代,列表解析,生成器)

    迭代(iterable):支持每次返回自己所包含一个对象的 iter()得到迭代器,.next()遍历列表. 列表解析:根据已有列表高效生成列表的方式. 生成器(Generator): 通过列表生成式 ...

  3. python学习笔记(一)元组,序列,字典

    python学习笔记(一)元组,序列,字典

  4. Python学习笔记(二)——列表

    Python学习笔记(二)--列表 Python中的列表可以存放任何数据类型 >>> list1 = ['Hello','this','is','GUN',123,['I','Lov ...

  5. python 学习笔记1(序列;if/for/while;函数;类)

    本系列为一个博客的学习笔记,一部分为我原创. 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 1. print 可以打印 有时需要 ...

  6. Python学习笔记(五)—列表的学习

    总结内容: 1.list的定义 2.list的取值 3.list数据的增加 4.list数据的删除 5.list数据的修改 6.list数据的查询 7.list方法的介绍 8.list的合并 9.多维 ...

  7. Python骚操作从列表推导和生成器表达式开始

    序列 序列是指一组数据,按存放类型分为容器序列与扁平序列,按能否被修改分为不可变序列与可变序列. 容器序列与扁平序列 容器序列存放的是对象的引用,包括list.tuple.collections.de ...

  8. python学习笔记-(八)装饰器、生成器&迭代器

    本节课程内容概览: 1.装饰器 2.列表生成式&迭代器&生成器 3.json&pickle数据序列化 1. 装饰器 1.1 定义: 本质上是个函数,功能是装饰其他函数—就是为其 ...

  9. Python入门之三元表达式\列表推导式\生成器表达式\递归匿名函数\内置函数

    本章目录: 一.三元表达式.列表推导式.生成器表达式 二.递归调用和二分法 三.匿名函数 四.内置函数 ================================================ ...

随机推荐

  1. 基于vue2.0的一个豆瓣电影App

    1.搭建项目框架 使用vue-cli 没安装的需要先安装 npm intall -g vue-cli 使用vue-cli生成项目框架 vue init webpack-simple vue-movie ...

  2. Struts 框架 之 文件上传下载案例

    Struts 框架 文件上传 1. 先准备 Struts 环境 (我使用的是struts 2.3.4版本) 导jar包:

  3. 掌握好这23个Linux命令常用项

    运维工程师(Operations)在国内又称为运维开发工程师(Devops),在国外称为 SRE(SiteReliability Engineering).负责维护并确保整个服务的高可用性,同时不断优 ...

  4. python机器学习实战(二)

    python机器学习实战(二) 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7159775.html 前言 这篇noteboo ...

  5. 利用workbench将excel数据导入到MySQL中

    数据导入的方式(csv,txt之类) 在MySQL中,数据导入的方式有两种方式 通过第三方客户端导入(workbench) 通过mysql client 方式导入 通过mysql clinet的导入方 ...

  6. Interlocked原子函数陷阱

    一.问题 windows api函数中提供了InterlockedExchange.InterlockedDecrement, InterlockedIncrement, ExInterlockedA ...

  7. 浅谈web服务器的编写之http协议

    本书是介绍怎么编写一个Web服务器,而Web服务器是基于HTTP(HyperText Transfer Protocol)协议实现的,所以要实现一个Web服务器就必须了解HTTP协议,本章主要介绍HT ...

  8. redhat6.4配置yum

    redhat6.4配置本地yum 1. 挂载(我喜欢放在/mnt下面)     mount -t auto *** /mnt/redhat     或     cp *** /mnt/redhat   ...

  9. linux常用的监控命令

    转自:http://www.cnblogs.com/huangxm/p/6278615.html 1.  top 显示所有正在运行而且处于活动状态的实时进程, 而且会定期更新显示结果:它显示了CPU使 ...

  10. Java条件查询涉及到时分秒

    关于Oralce数据库 的日期时间查询: 下面我们先来看一组日期数据 表:myDate 列:time; 1998-8-7 23:45:33.3 1998-8-7 11:22:21.5 1998-8-7 ...