列表和字典类型 —— 这可能是在Python程序中所见到并使用的两种最常见、最具有灵活性而且功能最为强大的集合体类型。
map 映射
map()是Python内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。
1 | >>> L = map(str, [1, 2, 4]) # int转str |
list 有序集
remove方法按给定元素删除
1 | >>> a = ['a', 'b', 'a', 2, 3, 2] |
pop方法按index删除
1 | >>> a = ['a', 'b', 'a', 2, 3, 2] |
del命令也可以删除列表元素,按index删除
1 | >>> a = ['a', 'b', 'a', 2, 3, 2] |
列表分片赋值
分片赋值最好分成两步来理解:
1.删除, 删除等号左边指定的分片, 含头不含尾。
2.插入, 将包含在等号右边对象中的片段插入旧分片被删除的位置。
1 | >>> L = [1, 3, 5, 7, 9] |
sort
1 | >>> L = ['a', 'A', 'b', 'C'] |
set 无序集
1 | >>> a = set(1,2,3) # set和list 不能通过参数列表的方式初始化元素 |
dict 字典
Python 3.0中的keys返回一个迭代器,在Python 2.6中,keys构建并返回一个真正的列表
初始化
1 | >>> d = {'a': 1, 'b': 2, 'c': [3,4,5]} # 方式一 |
2个list通过zip合并成dict
1 | >>> list_a = ['a', 'b', 'c'] |
items
1 | >>> d = {'a': 1, 'b': 2, 'c': [3,4,5]} |
dict是可变类型
1 | >>> d |
copy和deepcopy
copy
字典、列表本身有copy方法
拷贝需要注意的是:无条件值的分片以及字典copy方法只能做顶层复制。也就是说,不能够复制嵌套的数据结构(如果有的话)。如果你需要一个深层嵌套的数据结构的完整的、完全独立的拷贝,那么就要使用标准的copy模块——包括import copy语句,并编辑X = copy.deepcopy(Y)对任意嵌套对象Y做完整的复制。
- 没有限制条件的分片表达式(L[:])能够复制序列。
- 字典copy方法(X.copy())能够复制字典。
- 有些内置函数, 例如list, 能够生成拷贝(list(L))。
- copy标准库模块能够生成完整拷贝。
1 | >>> d |
deepcopy
copy只复制顶层结构, deepcopy可以复制嵌套的数据结构
1 | >>> d |
进一步测试
1 | >>> d2 |
比较大小
一般来说,Python中不同的类型的比较方法如下:
- 数字通过相对大小进行比较。
- 字符串是按照字典顺序,一个字符接一个字符地对比进行比较(”abc” < “ac”)。
- 列表和元组从左到右对每部分的内容进行比较。
- 字典通过排序之后的(键、值)列表进行比较。字典的相对大小比较在Python 3.0中不支持
1 | >>> d |