ch5-内置数据结构

5.1 列表的更多内容
list.append(x)
list.extend(L)
list.insert(i, x)将x作为插入后列表中索引为i的元素插入列表中
list.remove(x)列表中没有x会引发错误
list.pop(i)删除索引为i的元素,如果i被省略,删除最后一个元素,并将其返回
list.clear()
list.index(x)
list.count(x)
list.sort()
list.reverse()
list.copy()浅拷贝相当与list[:]

列表推导式
将某个操作应用与一个列表中,并且生成新的列表,这是一个很常见的情况。而列表
推导式为这种情况提供了一个简便的写法。
[ args   for arg1 in seq1 for arg2 in seq2 ...   if preds ]
总体上列表推导式可以分为三个部分:
1. 给定列表推导式参数以及最终列表里求值元素的表达式,指定会在列表推导式中出现的符号。必须有!
2. 对于每个给定的符号给出取值范围。至少有一个
3. 对于每个符号的取值,需要满足的条件。可选的

至于如果列表推导式中的各个部分如果相互矛盾或者有什么问题会怎么样?我没有
深入去探究,不过应该会报错吧。

嵌套的列表推导式
做个矩阵转置来演示吧
matrix = [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12],
]
Tmatrix = [[row[i] for row in matrix[i]] for i in range(4)]
看到的时候,虎躯一震,实在是太简洁了

5.2 del语句
del语句可以用来删除给定索引的元素。还可以将某个符号从符号表中清除!

5.3 元组和序列
元组由括号将许多由逗号分隔的值包括起来表示。在输入的时候也可以省去括号。
但有括号会有助于看清楚嵌套层次。

元组是不可变的。通常通过索引或者序列分拆来访问。一个空括号表示一个空的元组。
空括号中有一个元素加上一个逗号表示一个只有一个元素的元组。

由于元组输入时可以省去括号,所以t = x, y, z 这样的操作是允许的,称为
元组封装。而一般的如果seq是一个序列那么x, y, z = seq成为序列拆封,这里要求
左边变量于序列元素个数相同。而在函数那里提到的可变参数其实只是这里的一个
应用。

5.4 集合
集合是一个没有重复元素的数据结构。支持检测元素是否存在和删除元素,以及集合的
数学运算。

可以使用set()函数或者大括号来创建集合。然而要创建空集只能用set(),比如:
a = { x for x in "adfsdfghsabfsfjskfhf" if x not in "abc" }

5.5 字典
字典为键-值对的数据结构,可以根据键来索引值。键是不可变的,值随意。
tel = {'jack' : 10086, 'sape' : 10010}
可以使用dict()函数从键值对容器中直接创建字典:
tel = dict([('jack', 10086), ('sape', 10010)])
或者从键值表达式中创建字典:
{x : x ** 2 for x in (2, 4, 6)}
也可以使用dict的关键字参数创建字典

5.6 循环技巧
* 对于字典,可以使用item()方法将键值同时提取出来
* 对于序列,可以使用enumerate()同时得到索引和值
* 同时循环多个序列,可以使用zip将多个序列打包:
questions = ['name', 'quest', 'favorite color']
answers = ['lancelot', 'the holy grail', 'blue']
for q, a in zip(questions, answers):
    print('What is your {0}?  It is {1}.'.format(q, a))
---
What is your name?  It is lancelot.
What is your quest?  It is the holy grail.
What is your favorite color?  It is blue.
酷!
* 要逆向循环某个序列,可以使用resersed(seq)获得逆向序列
* 使用sorted()获得某个序列排序后的序列,不改变原序列
* 在循环中改变正在遍历的序列是有危险的,可以创建一个副本用于便利

5.7 深入条件控制
in 用于判断某个值是否在某个序列中。is 用于判断两个对象是否相同
比较操作是可以传递的 a < b < c 的含义就和现实中的一样
and or not
短路操作,而且返回的是最后一个被判断的值

5.8 序列的比较

序列的比较遵循字典序


参考文档 http://www.pythondoc.com/pythontutorial3/datastructures.html

基于cc4.0发布

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值