1.今日内容大纲
- 列表
- 基础数据类型dict
- 基础数据类型字典
- 字典的常用操作方法
2.具体内容
1.列表
- 列表
l1 = [1,2,3]
l2 = list('abc')
l3 = [i for i in range(10)]
- 列表的增删改查
# 增
append 追加;insert 插入; extend 迭代着追加
# 删
pop 按照索引删除,有返回值; remove 按照元素删除;
del 按照索引 切片 删除列表; clear 清空。
# 改:
l1[0] = 按照索引改值
l1[1:3] = 按照切片改值。
l1[::2] = 按照步长更改。
# 查:
索引查询,切片查,for循环。
l1 + l1 列表可以相加
l1*int相乘。)
2.基础数据类型元组
- 引子
程序中,有时候需要将一些重要的数据放在一个容器型数据类型中,只允许看,不允许改。我们应该讲这些数据放在元组中。 - 创建方式
tu = (1,2,3,'太白')
tu1 = tuple('abcd')
print(tu1)
- 数据类型的分类
容器型: list,tuple,dict,set
非容器型:int str bool
可变的数据类型:list,dict,set
不可变的数据类型:int bool str tuple - 元组只能查看:索引,切片,for循环。
tu = (1,2,3,'太白')
print(tu[0])
print(tu[::2])
for i in tu:
print(i)
- 坑1:如果元组中只有一个元素并且没有逗号,则它不是元组与该元素类型一致。
tu1 = ('barry')
tu1 = (100)
tu1 = (100,)
print(tu1,type(tu1)
- 坑2:元组是不可变的,直接属于元组的元素不可遍,如果元组中还嵌套其他可变的数据类型,那么这些数据类型里面的元素是可变的。
# tu1 = (22, 33, ['barry', '冲哥'])
# # del tu1[-1] 不行
# tu1[-1].append(666)
# print(tu1)
3.基础数据类型字典
- 引子
列表的缺点:
- 查询速度慢。
l1 = [上百万的元素]
if '冲哥' in l1: # 遍历查询,速度慢
pass
- 列表存储的数据与数据之间的关联性不凸显。
l1 = ['达哥', 20, '男', '看电影', '冲哥', 18, '男', '打游戏']
数据类型中,有一个容器型数据类型:dict,字典是以键值对的形式存储的,字典的键是唯一的,键是不可变的数据类型。字典的值是任意数据类型。
python3.5版本之前,字典是无序的。python3.6之后,字典是按照创建字典时插入的数据排列的。
字典的优点:
- 查询速度快。
直接找到key去进行查询。 - 存储关联型的数据。
dic = {'大哥': {'age': 18, 'hobby': '看电影'}}
字典的缺点:
字典是通过空间换取时间,具体的量级:几百万个对象,8GB 的内存没有问题。
- 创建字典的几种方式:
d1 = {'name': 'barry'}
d1 = dict(one=1, two=2, name=123)
# print(d1)
d1 = dict((('n',111),('m',666),('q',222)))
print(d1)
dic = dict({'one': 1, 'two': 2, 'three': 3})
print(dic) # {'one': 1, 'two': 2, 'three': 3}
5.字典的常用操作方法
- 增
# 增
# 直接按照键去增加 有则改之,无则增加
# d1['hobby'] = '乒乓球'
# d1['age'] = 21
# setdeafult 有返回值 有则不变,无则增加
# d1.setdefault('hobby')
# res = d1.setdefault('hobby','球类运动')
# print(res)
# d1.setdefault('age', 25)
# print(d1)
# 删
# 按照键删除
# res = d1.pop('name')
# print(res)
# res = d1.pop('name1',None)
# print(res)
# del d1['name']
# del d1['name1'] # 报错
# 清空
# d1.clear()
# print(d1)
# 改
# d1['age'] = 21
# update更新 约等于 改
# d1.update(hobby='球类')
# d1.update(name='大哥')
# print(d1)
# dic1 = {"name":"jin","age":18,"sex":"male"}
# dic2 = {"name":"alex","weight":75}
# 将dic2中的键值对覆盖增加到dic1中
# dic1.update(dic2)
# print(dic1)
# print(dic2)
# 查
# 直接按照键去查询
# print(d1['name'])
# print(d1['name1'])
# get
# print(d1.get('name'))
# print(d1.get('name1'))
# print(d1.get('name1','查啥?没有!'))
# 字典提供了三种特殊的查询方法,返回的都是类似于列表的容器
# print(d1.keys()) # 获取字典所有的键
# print(d1.values()) # 获取字典所有的值
# print(d1.items()) # 获取字典所有的键值对
# 拆包 分别赋值
# # a,b = (11,22)
# # a,b = ['abc', 'dbe']
# a,b = '太白', 'barry'
# print(a,b)
# 面试题:
# a = 10
# b = 20
# a, b = b, a
# print(a,b)
# for 循环
d1 = {'name': 'barry', 'age': 18}
# for i in d1:
# print(i)
# for key in d1.keys():
# print(key)
# for value in d1.values():
# print(value)
# for i in d1.items():
# print(i)
# for k,v in d1.items():
# print(k,v)
# 字典的嵌套
dic = {
'name':'汪峰',
'age':48,
'wife':[{'name':'国际章','age':38}],
'children':{'girl_first':'小苹果','girl_second':'小怡','girl_three':'顶顶'}
}
print(dic['children']['girl_three'])
dic['children']['girl_three'] = '汪顶顶'
print(dic)