Python基础(三)——列表,元组,字典
一.列表
1.1 什么是列表
列表是一种有序的,可变的数据结构。列表由元素构成,每个元素对应一个下标(index),元素可以为任何类型。
列表嵌套会形成矩阵(二维数组)
1.2 列表如何定义及特性
用[]包住,元素间用 , 隔开
属于可变类型,支持增删改查,查看长度
#创建空列表
list_test = list() #或者list_test = []
#添加元素
list_test.append('hello')
list_test.append(10)
list_test.append([1,2,3])
list_test.append(66)
print(list_test)
#插入元素
list_test.insert(1,100) #参数分别为插入的位置,插入的值
print(list_test)
#修改元素
list_test[2] = 66
list_test[0:2] = ['xinxin',0] #如果插入的数量大于切片,会继续顺延
print(list_test)
#查找元素
print(list_test[3])
print(list_test[0:3])
#删除元素
list_test.pop(1) #基于下标删除,参数值为下标,默认删除最后一个。会返回删除的值
list_test.remove(66) #基于数据值删除,但是只匹配查找到的第一个值
del list_test[1:2] #基于索引位置删除
list_test.clear() # 清空整个列表
print(list_test)
del list_test #删除列表
1.3列表常用操作
1.3.1 列表合并
两种方法:
1.利用+合并,实际是赋值给新变量
2.利用extend,这个方法直接改变了原列表
list_1 = [1,2,3,4]
list_2 = [5,6,7,8,9]
list_join = list_1 + list_2
print(list_join)
list_1.extend(list_2)
print(list_1)
1.3.2 列表排序
正序:sort()倒序:sort(reverse = True)
临时排序:sorted(),不会改变原列表
list_1 = [1,100,300,4]
list_1.sort(reverse = True)
print(list_1)
1.3.3 列表反转
list_1 = ['我','爱','你']
list_1.reverse()
print(list_1)
1.3.4 列表元素数量统计
统计元素出现的个数
list_2 = [5,6,7,6,8,6,9]
print(list_2.count(6))
1.3.5自身复制
list_2 = [5,6,7,6,8,6,9]
new_list_2 = list_2 * 2
print(new_list_2)
1.3.6 列表长度
list_2 = [5,6,7,6,8,6,9]
print(len(list_2))
1.3.7列表复制
分位浅复制和深复制
深复制需引入copy库
#浅复制
list_old = [[1,2,3],[4,5,6]]
list_shallow = list_old.copy()
print(id(list_old))
print(id(list_shallow))
print(id(list_old[0]))
print(id(list_old[0]))
#执行结果
140684084155968
140684084155840
140684085061056
140684085061056
我们会发现最外层确实复制了,新列表分配了新的地址。但是内层列表地址还是相同的
#深复制
import copy
list_old = [[1,2,3],[4,5,6]]
list_deep = copy.deepcopy(list_old)
print(id(list_old))
print(id(list_deep))
print(id(list_old[0]))
print(id(list_deep[0]))
#运行结果
140150716196736
140150716196096
140150716026048
140150716196800
内外层地址都不同
1.3.8内部元素处理
#元素合并
list_join = ['I','love','you']
print(' '.join(list_join)) #引号内是连接方式
#元素拆分
list_split = ['你好,我是名学生,我正在学习Python']
new_list = list_split[0].split(',') #引号内是分割方式
print(new_list)
#去掉重复元素
list_1 = [1,2,3,4,5,1,5,3,2]
print(set(list_1))
1.3.9 列表解析
将想要新生成的数据代码和for循环,if等写在一起写在一起
list_1 = [value*2 for value in range(1,11) if value%2==0]
print(list_1)
[规则 for循环 if控制]
list_1 = [(x,y) for x in [1,2,3] for y in [4,5,6]]
print(list_1)
相当于两个for循环嵌套,将数据组合成元组
如果有多个返回值,用多元数据结构返回
当对元组使用解析时,最终输出的结果不是原始类型,是生成器,后续会讲
解析方法同样适用于字典
fields = ['姓名','年龄','城市']
info = ['xx',22,'赤峰']
print(dict(zip(fields,info))) #用zip函数对两组数据进行压缩,返回的是对象,我们可以转换成list,dict查看
#字典解析
dict_1 = {x:y for x,y in zip(fields,info)}
print(dict_1)
二.元组
2.1 什么是元组
与列表类似,但是内部值不可更改,也就不支持增删改。用()包住
创建只有一个元素的元组时,要在第一个元素后面加一个逗号
支持不加括号创建
需要改元组数据时,可以转换为列表操作
2.2 元组列表对比
元组优点:
- 大型数据处理速度快
- 对数据有保护功能
- 当函数返回多个值时,一般以元组方式返回
三.字典
3.1 什么是字典
储存具有一系列映射关系的数据结构,映射关系称为键值对(key:value),在pytohn中称item,全部键值对就是items
{}包住,键值对间逗号隔开
test = {'name':'xinxin','age':20}
3.2字典特性
2不准:不准改变键,键不准重复
4支持:增删键和值,基于键改变值,基于键查询
2注意:只能使用不可变类型作为键;通常不使用数字作为键
3.3创建方法
dict_1 = dict()
dict_2 = dict{}
dict_3 = {'name':'xinxin','age':20}
dict_4 = dict({'name':'xinxin','age':20})
dict_5 = dict(name='mike',age=20)
基于列表建立字典
keys = ['姓名','年龄','祖籍']
new_dict = dict.fromkeys(keys,可以设置值,不设置默认none)
print(new_dict)
3.4增删改查
dict_1 = {'name':'xinxin','age':20}
#增加数据
dict_1['gender'] = '男'
print(dict_1)
#修改数据
dict_1['age'] = '22'
print(dict_1)
#查询数据
dict_1['name']
dict_1.get('name') #没找到会返回None
#删除数据
del dict_1['gender']
print(dict_1)
dict_1.pop('age') #必须有参数
print(dict_1)
dict_1.clear() #清空字典
print(dict_1)
3.5常用操作
3.5.1 返回字典的键值对,键,值
#返回键值对
dict_1 = {'name':'xinxin','age':20}
for k,v in dict_1.items():
print(k,v)
#返回键
dict_1 = {'name':'xinxin','age':20}
for k in dict_1.keys():
print(k)
#返回值
dict_1 = {'name':'xinxin','age':20}
for v in dict_1.values():
print(v)
3.5.2 字典合并
dict_1 = {'name':'xinxin','age':20}
dict_2 = {'name':'Jane','age':20,'gender':'女'}
dict_1.update(dict_2)
print(dict_1)
有重复的key,就会更新key值,没有就会添加
3.5.3 查询键,不存在则添加
dict_1 = {'name':'xinxin','age':20}
print(dict_1.setdefault('gender',可设置值))