1.1 列表
列表是大小和内容都可以改变的序列对象,用[ ]括起来,一个列表中的元素可以是多种不同类型。
列表是一种序列,即每个列表元素都有一个自己的位置(索引);
1. 单索引
从0开始,支持正向和负向索引。
list1 = ['张三','男',33,'江苏','硕士','已婚',['身高178','体重72']]
print(list1[0]) # 取出第1个元素
print(list1[3]) # 取出第4个元素
print(list1[-1]) # 取出最后1个元素
print(list1[-1][1]) # 取出“体重72”这个值
张三
江苏
['身高178', '体重72']
体重72
2. 切片索引
[开始:结束:步长]
注意,不包含结束索引,即 [开始, 结束)。
默认步长为1;若无开始索引,则从0开始;若无结束索引,则直到末尾。
list2 = ['江苏','安徽','浙江','上海','山东','山西','湖南','湖北']
print(list2[2:6]) # 取出第3至6个元素, 索引是2-5
print(list2[1:6:2]) # 取出第2,4,6个元素
print(list2[-3:-1]) # 取出最后3个元素
['浙江', '上海', '山东', '山西']
['安徽', '上海', '山西']
['山西', '湖南']
print(list2[:3]) # 取出前3个元素
print(list2[-3:]) # 取出最后3个元素
print(list2[::]) # 取出所有元素
print(list2[::2]) # 取出奇数位置的元素
print(list2[1::2]) # 取出偶数位置的元素
['江苏', '安徽', '浙江']
['山西', '湖南', '湖北']
['江苏', '安徽', '浙江', '上海', '山东', '山西', '湖南', '湖北']
['江苏', '浙江', '山东', '湖南']
['安徽', '上海', '山西', '湖北']
3. 列表元素操作
列表也是对象,通过列表的方法可以对列表元素进行增加、删除、修改等操作。
(1) 列表元素的增加
方法:
append()——只能在列表末尾增加元素,且每次只能增加1个元素;
extend()——可以在列表末尾增加多个元素,注意增加的元素必须打包成列表的形式;
insert()——可以在列表指定位置插入元素或列表(该列表作为1个元素)。
list3 = [1,10,100,1000,10000]
list3.append(2) # 在列表末尾添加数字2
print(list3)
list3.extend([20,200,2000,20000]) # 在列表末尾添加20,200,2000,20000四个值
print(list3)
[1, 10, 100, 1000, 10000, 2]
[1, 10, 100, 1000, 10000, 2, 20, 200, 2000, 20000]
list3.insert(2,11) # 在索引2处插入11
print(list3)
list3.insert(6,['a','b','c']) # 在索引6处插入['a','b','c']
print(list3)
[1, 10, 11, 100, 1000, 10000, 2, 20, 200, 2000, 20000]
[1, 10, 11, 100, 1000, 10000, ['a', 'b', 'c'], 2, 20, 200, 2000, 20000]
(2) 列表元素的删除
方法:
pop()——用来删除列表末尾或指定位置处的元素,且每次只能删除1个元素;
remove()——用来删除列表的指定值,若有多个该值,只删除第一个;
clear()——删除列表的全部元素,返回空列表。
list3.pop() # 删除list3的最后1个元素
print(list3)
list3.pop(2) # 删除list3中索引2处的元素
print(list3)
[1, 10, 11, 100, 1000, 10000, ['a', 'b', 'c'], 2, 20, 200, 2000]
[1, 10, 100, 1000, 10000, ['a', 'b', 'c'], 2, 20, 200, 2000]
list3.remove(['a', 'b', 'c']) # 删除list3中的['a', 'b', 'c']
print(list3)
list3.clear() # 删除list3中所有元素
print(list3)
[1, 10, 100, 1000, 10000, 2, 20, 200, 2000]
[]
(3) 列表元素的修改
对列表元素重新赋值,即对列表元素修改。
list4 = ['洗衣机','冰响','电视机','电脑','空调']
print(list4[1])
list4[1] = '冰箱' # 将“冰响”修改为“冰箱”
print(list4)
冰响
['洗衣机', '冰箱', '电视机', '电脑', '空调']
4. 列表的其他方法
列表的其他方法,还有排序、计数、查询位置、反转等。
方法:
count()——对列表的某个元素进行计数,每次只能传递一个值;
index()——返回某元素在列表中的位置,若有多个该值,只返回首次出现的索引;
reverse()——将列表中的元素全部反转;
sort()——对列表元素排序,默认是升序,设置参数reverse=True,则按降序。
list5 = [7,3,9,11,4,6,10,3,7,4,4,3,6,3]
print(list5.count(3)) # 计算列表中元素3的个数
print(list5.index(6)) # 找出元素6所在的位置
list5.reverse() # 列表元素的反转
print(list5)
list5.sort(reverse=True) # 列表元素的降序排列
print(list5)
4
5
[3, 6, 3, 4, 4, 7, 3, 10, 6, 4, 11, 9, 3, 7]
[11, 10, 9, 7, 7, 6, 6, 4, 4, 4, 3, 3, 3, 3]
3.1.2 元组
元组,是固定长度不可变的序列对象,用( )括起来。
元组与列表的区别:
- 元组不可变,列表可变;
- 元组通常存储异构的数据,列表通常存储同构的数据;
- 元组主要用来表示结构(可作为字典的键值),列表主要用来表示顺序。
person = ('zhangsan', 20, 180, 80) #元组
sheet = [('zhangsan', 20, 180, 80), ('wangwu', 25, 170, 60)] #列表
元组可用的方法有count()和index(), 功能同列表。
t = ('a','d','z','a','d','c','a')
print(t.count('a')) # 计数
print(t.index('c')) # 元素位置
3
5
3.1.3 字典
字典是按 “键-值”对 存储数据的容器,键和值都是Python对象。
“键”是名字,“值”是内容,通过“键”来访问“值”,可以称之为映射。“键”可以是数字、字符串、元组;“值”可以是一般数据,甚至是列表、函数等。同一字典中,并不要求所有“键”或“值”是同构数据。
序列可以看作是一种“键”为有序数列的字典。
创建字典基本语法:
{key1: value1, key2: value2, ...}
dict1 = {'姓名':'张三','年龄':33,'性别':'男','子女':{'儿子':'张四','女儿':'张美'},'兴趣':['踢球','游泳','唱歌']}
print(dict1)
print(dict1['年龄']) # 取出键为年龄的值
print(dict1['子女']['儿子']) # 取出键为子女的值(是字典)中再键为儿子的值
print(dict1['兴趣'][1]) # 取出键为兴趣的值(是列表)中的索引为1的元素
{'姓名': '张三', '年龄': 33, '性别': '男', '子女': {'儿子': '张四', '女儿': '张美'}, '兴趣': ['踢球', '游泳', '唱歌']}
33
张四
游泳
1. 字典元素的增加或修改
有三种方法可以实现:
- setdefault(key, value)
- update(key: value) 或 update(object_dict)——增加或修改字典元素;
- 通过对键索引赋值,若字典没有该键,则增加键-值对,若有该键,则修改该键的值。
dict1.setdefault('户籍','合肥') # 往字典dict1中增加户籍信息
print(dict1)
dict1.update({'学历':'硕士'}) # 增加学历信息
print(dict1)
dict1['身高'] = 178 # 增加身高信息
print(dict1)
{'姓名': '张三', '年龄': 33, '性别': '男', '子女': {'儿子': '张四', '女儿': '张美'}, '兴趣': ['踢球', '游泳', '唱歌'], '户籍': '合肥'}
{'姓名': '张三', '年龄': 33, '性别': '男', '子女': {'儿子': '张四', '女儿': '张美'}, '兴趣': ['踢球', '游泳', '唱歌'], '户籍': '合肥', '学历': '硕士'}
{'姓名': '张三', '年龄': 33, '性别': '男', '子女': {'儿子': '张四', '女儿': '张美'}, '兴趣': ['踢球', '游泳', '唱歌'], '户籍': '合肥', '学历': '硕士', '身高': 178}
dict1.update({'学历':'本科'}) # 将键为学历的值改为本科
print(dict1)
dict1['年龄'] = 35 # 将键为年龄的值改为35
print(dict1)
dict1['兴趣'][2] = '跳舞' # 将键为兴趣的值(是列表),中的索引为2的值改为跳舞
print(dict1)
{'姓名': '张三', '年龄': 33, '性别': '男', '子女': {'儿子': '张四', '女儿': '张美'}, '兴趣': ['踢球', '游泳', '唱歌'], '户籍': '合肥', '学历': '本科', '身高': 178}
{'姓名': '张三', '年龄': 35, '性别': '男', '子女': {'儿子': '张四', '女儿': '张美'}, '兴趣': ['踢球', '游泳', '唱歌'], '户籍': '合肥', '学历': '本科', '身高': 178}
{'姓名': '张三', '年龄': 35, '性别': '男', '子女': {'儿子': '张四', '女儿': '张美'}, '兴趣': ['踢球', '游泳', '跳舞'], '户籍': '合肥', '学历': '本科', '身高': 178}
2. 字典元素的删除
方法:
pop(key)——删除字典中键为key的键-值对,必须指定key;
popitem()——任意删除字典中一个键-值对;
clear()——删除字典中的全部键-值对,返回空字典。
dict1.pop('户籍') # 删除字典中的键为户籍的键-值对
print(dict1)
dict1['子女'].pop('女儿') # 字典中键为女儿的值(是字典),删除其中键为女儿的键-值对
print(dict1)
dict1.popitem() # 删除字典中的任意一个键-值对
print(dict1)
dict1.clear() # 清空字典
print(dict1)
{'姓名': '张三', '年龄': 33, '性别': '男', '子女': {'儿子': '张四', '女儿': '张美'}, '兴趣': ['踢球', '游泳', '唱歌'], '学历': '硕士', '身高': 178}
{'姓名': '张三', '年龄': 33, '性别': '男', '子女': {'儿子': '张四'}, '兴趣': ['踢球', '游泳', '唱歌'], '学历': '硕士', '身高': 178}
{'姓名': '张三', '年龄': 33, '性别': '男', '子女': {'儿子': '张四'}, '兴趣': ['踢球', '游泳', '唱歌'], '学历': '硕士'}
{}
3. 字典的其它方法
方法keys(), values(), items()分别取出字典中所有键、所有值、所有键-值对。
方法get()用来取出键对应的值,这与直接用键索引相同,区别是即使键不存在,也不会报错。
{'姓名': '张三', '年龄': 33, '性别': '男', '子女': {'儿子': '张四', '女儿': '张美'}, '兴趣': ['踢球', '游泳', '唱歌'], '学历': '本科'}
{'姓名': '张三', '年龄': 35, '性别': '男', '子女': {'儿子': '张四', '女儿': '张美'}, '兴趣': ['踢球', '游泳', '唱歌'], '学历': '本科'}
{'姓名': '张三', '年龄': 35, '性别': '男', '子女': {'儿子': '张四', '女儿': '张美'}, '兴趣': ['踢球', '游泳', '跳舞'], '学历': '本科'}
dict2 = {'电影':['三傻大闹宝莱坞','大话西游之大圣娶亲','疯狂动物城'],
'导演':['拉吉库马尔·希拉尼','刘镇伟','拜伦·霍华德 '],
'评分':[9.1,9.2,9.2]}
print(dict2.get('评分')) # 取出键为'评分'所对应的值
print(dict2.keys()) # 取出字典中的所有键
print(dict2.values()) # 取出字典中的所有值
print(dict2.items()) # 取出字典中的所有键值对
[9.1, 9.2, 9.2]
dict_keys(['电影', '导演', '评分'])
dict_values([['三傻大闹宝莱坞', '大话西游之大圣娶亲', '疯狂动物城'], ['拉吉库马尔·希拉尼', '刘镇伟', '拜伦·霍华德 '], [9.1, 9.2, 9.2]])
dict_items([('电影', ['三傻大闹宝莱坞', '大话西游之大圣娶亲', '疯狂动物城']), ('导演', ['拉吉库马尔·希拉尼', '刘镇伟', '拜伦·霍华德 ']), ('评分', [9.1, 9.2, 9.2])])