本笔记是基于《Python学习手册-原书第五版》第八章 列表与字典的个人理解。
列表和字典都是其他对象的集合,可以在原位置进行修改,按需求增长或缩短,可以包含任何种类的嵌套。
列表
列表是Python中最具灵活性的有序集合对象类型,可以通过偏移量访问,长度可变,可异构,可嵌套,属于可变序列,对象引用数组。
列表的基本操作
# 求列表的长度
>>> len([1,2,3])
3
# 列表的拼接
>>> [1,2,3]+[4,5,6]
[1, 2, 3, 4, 5, 6]
# 列表的重复
>>> [1,2,3]*2
[1, 2, 3, 1, 2, 3]
# 列表转化为字符串会发生什么
>>> str([1,2])+'34'
'[1, 2]34'
# 字符串转化为列表会发生什么
>>> [1,2]+ list('34')
[1, 2, '3', '4']
列表的迭代和推导
# 把每个字符重复4次,存入列表
>>> L = [c*4 for c in 'Python']
>>> L
['PPPP', 'yyyy', 'tttt', 'hhhh', 'oooo', 'nnnn']
# 等效代码
>>> L = []
>>> for c in 'Python':
L.append(c * 4)
>>> L
['PPPP', 'yyyy', 'tttt', 'hhhh', 'oooo', 'nnnn']
# 将列表中的数值转变为绝对值
>>> list(map(abs, [-2,-1,0,1,2]))
[2, 1, 0, 1, 2]
索引、分片和矩阵
>>> L = ['Python','Java','C++']
# 索引
>>> L[2]
'C++'
# 切片
>>> L[1:3]
['Java', 'C++']
# 矩阵
>>> matrix = [[1,2,3],[4,5,6],[7,8,9]]
# 矩阵第一行
>>> matrix[0]
[1, 2, 3]
# 矩阵第三行第一列
>>> matrix[2][0]
7
索引和切片对原位置修改
L = ['Python', 'Java', 'C++']
# 通过索引进行原位置修改
>>> L[0] = 'C'
>>> L
['C', 'Java', 'C++']
# 通过切片进行原位置修改——覆盖
>>> L[1:3] = ['Python', 'Java']
>>> L
['C', 'Python', 'Java']
# 通过切片进行原位置修改——增长
>>> L[1:2] = ['C++', 'Javascrip']
>>> L
['C', 'C++', 'Javascrip', 'Java']
# 通过切片进行原位置修改——缩短
>>> L[1:2] = []
>>> L
['C', 'Javascrip', 'Java']
# 通过切片在开头增加
>>> L[:0] = ['C++','Python']
>>> L
['C++', 'Python', 'C', 'Javascrip', 'Java']
# 通过切片在末尾增加
>>> L[len(L):] = ['C#', 'Go']
>>> L
['C++', 'Python', 'C', 'Javascrip', 'Java', 'C#', 'Go']
列表的常用方法
其中pop()方法和append()方法联合使用可以实现后进后出的栈结构。
增
>>> L = [1,2,3]
# extend()方法对列表末尾,是对原列表的扩展
>>> L.extend([4,5])
>>> L
[1, 2, 3, 4, 5]
# append()方法对列表末尾增加,参数作为一个整体
>>> L.append([6,7])
>>> L
[1, 2, 3, 4, 5, [6, 7]]
# reverse()方法对列表进行倒序
>>> L.reverse()
>>> L
[[6, 7], 5, 4, 3, 2, 1]
# insert方法在偏移量处插入元素
>>> L.insert(1,'Javascrip')
>>> L
['Python', 'Javascrip', 'Java', 'C++', 'C']
删
# pop方法删除偏移量位置的元素并返回它的值
>>> L = [1,2,3,4]
>>> L.pop(2)
3
# del语句删除列表某个位置或某个段落
>>> L = ['Python','Java',"C++"]
>>> del L[0]
>>> L
['Java', 'C++']
>>> L = ['Python','Java',"C++"]
>>> del L[1:3]
>>> L
['Python']
# remove方法移除元素
>>> L = ['Python','Java','C++','C']
>>> L.remove('C')
>>> L
['Python', 'Java', 'C++']
改
# sort()方法对列表进行排序 ——不能对数字和列表的混合列表使用
>>> L = [4,5,2,1,3]
>>> L.sort()
>>> L
[1, 2, 3, 4, 5]
# sort可以通过传入参数的方法决定排序顺序
>>> L = ['abc', 'ABD', 'aBe']
>>> L.sort()
>>> L
['ABD', 'aBe', 'abc']
>>> L = ['abc', 'ABD', 'aBe']
>>> L.sort(key = str.lower)
>>> L
['abc', 'ABD', 'aBe']
>>> L = ['abc', 'ABD', 'aBe']
>>> L.sort(key = str.lower, reverse = True)
>>> L
['aBe', 'ABD', 'abc']
查
# index语句查询元素的偏移量
>>> L = ['Python','Java','C++','C']
>>> L.index('C++')
2
# count方法统计元素出现次数
>>> L = ['Python','Java','C++','C','Python']
>>> L.count('Python')
2
字典
字典是Python中最灵活的内置数据结构类型。是无序的集合;通过键来存取数值;长度可变,可异构,可嵌套;属于可变映射类型;支持散列表。
字典的基本操作
# 创建字典
>>> D = {'xiaomi':2, 'huawei':1, 'apple':3}
# 通过键来索引
>>> D['apple']
3
# len()函数求字典键值对个数
>>> len(D)
3
# 判断字典是否有该键
>>> 'xiaomi' in D
True
# 通过列表和keys方法列出所有的键
>>> list(D.keys())
['xiaomi', 'huawei', 'apple']
# 通过给旧键赋值对字典进行修改
>>> D['apple'] = ['pink', 'blue']
>>> D
{'xiaomi': 2, 'huawei': 1, 'apple': ['pink', 'blue']}
# 通过给新键赋值对字典进行增加
>>> D['oppo'] = 4
>>> D
{'xiaomi': 2, 'huawei': 1, 'apple': ['pink', 'blue'], 'oppo': 4}
# 通过del 语句删除键值对
>>> del D['apple']
>>> D
{'xiaomi': 2, 'huawei': 1, 'oppo': 4}
字典的常用方法
增
# update方法拼接两个字典
>>> D = {'xiaomi':2, 'huawei':1, 'apple':3}
>>> D2 = {'mixiao':2, 'weihua':1, 'pleap':3}
>>> D.update(D2)
>>> D
{'xiaomi': 2, 'huawei': 1, 'apple': 3, 'mixiao': 2, 'weihua': 1, 'pleap': 3}
删
# pop方法根据键删除元素,返回键存储的值
>>> D = {'xiaomi':2, 'huawei':1, 'apple':3}
>>> D.pop('apple')
3
>>> D
{'xiaomi': 2, 'huawei': 1}
查
# values方法查询字典中的值
>>> D = {'xiaomi':2, 'huawei':1, 'apple':3}
>>> list(D.values())
[2, 1, 3]
# item方法查询字典中的键值对
>>> D = {'xiaomi':2, 'huawei':1, 'apple':3}
>>> list(D.items())
[('xiaomi', 2), ('huawei', 1), ('apple', 3)]
# get方法传入键,返回键的值;如果键不存在,返回设定的值,默认为None
>>> D = {'xiaomi':2, 'huawei':1, 'apple':3}
>>> D.get('apple')
3
>>> print(D.get('OPPO'))
None
>>> D.get('OPPO',88)
88