1. 元组
元组基本介绍
- 元组表现形式tuple
- 元组是⼀个不可变序列(⼀般当我们希望数据不改变时,我们使⽤元组,其他情况下基本都⽤列表)
- 使⽤()创建元素
- 元组不是空元组⾄少有⼀个 逗号(,) 当元组不是空元组时括号可以省略
- 元组解包指将元组当中的每⼀个元素都赋值给⼀个变量
元组 tuple ()
tuple1 = () # 空元组
当你创建元组的时候,可以省略括号
如果你创建的不是一个空元祖,那么元组里面必须要有一个逗号
tuple1 = (10,) #这样才是元组
print(type(tuple1))
数据的拆包,只要是一个序列,就可以进行拆包
元组的拆包
tuple1 = (1, 2, 3, 4)
a, *b, c = tuple1 # *是一个通配符
print(a)
print(b)
print(c)
字符串的拆包
s = 'abcdef'
a, *b, c = s # *代表其他全部
print(a)
print(b)
print(c)
列表的拆包
list1 = [1, 2, 3, 4, 5]
a, *b, c = list1 #这里的*和字符串的一样
print(a)
print(b)
print(c)
2.字典
2.1 字典的基本介绍
- 字典属于⼀种新的数据结构称为映射(mapping)
- 字典的作⽤和列表类似,都是⽤来存储对象的容器
- 列表存储数据的性能好,但是查询数据的性能差,字典正好与之相反
- 在字典中每⼀个元素都有唯⼀的名字,通过这个唯⼀的名字可以找到指定的元素
- 这个唯⼀的名字我们称之为key 通过key可以快速查询value 也可以称之为值
- 字典我们也称之为键值对(key-value)结构
- 每个字典中都可以有多个键值对,⽽每⼀个键值对我们称其为⼀项(item)
- 创建⼀个有数据的字典 语法 {key:value}
- 字典的值可以是任意对象 字典的键可以是任意的不可变对象(int str booltuple…)
- 字典的键是不能重复的,如果出现重复的后⾯的会替换前⾯的
一一对应的关系就叫做映射 mapping key-value 一个键值对 称呼为一项
字典的创建 dict {}
dict1 = {} # 创建空字典
字典写法 dict1 = {key: value值}
双值子序列 双值(1, 2) 子序列[(1,2)] 双值子序列[(1, 2), (3, 4)]
当字典中的key有重复的时候,后面的key-value会将前面的所替代
dict1 = {'name': '杨过',
'age': 18,
'gender': '男',
'name': '小龙女' #上面的杨过会变成小龙女
}
找value值要用key找
2.2遍历字典
遍历字典有3中方法
keys()
dict1 = {
'name': '杨过',
'age': 18,
'gender': '男',
'skill': '黯然销魂掌',
}
# keys()
for k in dict1.keys():
print(dict1[k]) #打印出来就是values值
values()
dict1 = {
'name': '杨过',
'age': 18,
'gender': '男',
'skill': '黯然销魂掌',
}
# values()
for v in dict1.values():
print(v) # 打印出来就是values值
items()
dict1 = {
'name': '杨过',
'age': 18,
'gender': '男',
'skill': '黯然销魂掌',
}
# items()
for k, v in dict1.items():
print(k, '=', v) #打印出来就是key=values值
2.3 字典的增删改查
2.3.1 通过key来获取value
print(dict[key])
2.3.2 获取的方法
get方法
dict.get(key)
2.3.3 修改字典
dict[key] = value
这个情况是由当前这个key存在的时候,会直接替换
当不存在这个key的时候,则是直接向字典中插入这个key-value
2.3.4 添加方法
- dict.setdefault(key) 向字典中添加key-value
当key存在的时候,不会对字典做任何修改,而是会返回这个value值
当key不存在时,则直接插入这条数据,并返回当前的这个value - dict.update() 将其他字典中的数据添加到这个字典当中来
当前这个key存在的时候,也会直接替换 - 删除方法
del 关键字删除
dict.popitem() 不需要传递参数,会默认删除最后一个键值对
res = dict.popitem() # 返回值是删除的内容
dict.pop(key, [default])
res = dict.pop(key, 设置的默认值) # 当不存在这个key的时候,会返回你设置的默认值
clear()# 清空字典
3.深拷贝和浅拷贝
copy() 浅拷贝
不可变类型数据的性质:值改变id就改变,值不改变,id就不会变
a = 'abcd'
b = 'abcd'
print(id(a), id(b)) # id是一样的,因为是字符串,而且值一样
可变类型 : 变得是id
c = [1, 2, 3]
# d = c # 除非加等号
d = [1, 2, 3]
print(id(c), id(d)) #这样id是不一样的
import copy
3.1 浅拷贝
只能拷贝第一层的数据,不能拷贝第二层乃至更多层的数据独立出来
不能拷贝深层的value值,如列表里面的值
dict2 = copy.copy(dict1)
copy() ⽅法⽤来对字典进⾏浅复制
注意:潜复制只会复制字典本身,如果字典中还有个字典是不会进⾏复制的
dict1 = {'name': 123, 'data': [1, 2, 3]}
dict2 = copy.copy(dict1)
dict1['name'] = 456 #这个就会改变
dict1['data'][1] = 456 #这个dict的2也会变
3.2深拷贝
:能够将所有层次的数据都拷贝出来,重新独立一份
dict2 =copy.deepcopy(dict1)
4.集合的简介
- 集合表现形式set 集合和列表⾮常相似
- 不同点
- 集合只能存储不可变对象
- 集合中存储的对象是⽆序的
- 集合不能出现重复元素
- 使⽤{}来创建集合
- 可以通过set()来将序列和字典转换成集合
- len() 使⽤len()来获取集合中元素的数量
- add()像集合中添加元素
- update()将⼀个集合中的元素添加到另⼀个集合当中
- pop()随机删除集合中的⼀个元素⼀般是删除最后⼀个元素
- remove() 删除集合中指定的元素
- clear() 清空集合
4.1集合的创建
- 集合用{}
set1 = {} # 这样只能创建空字典,不能创建空集合 - 空集合的创建
set1 = set() - 集合只能存储不可变对象
不能存储列表,字典等 - 集合中存储的对象是无序的 , 他是没有索引的
- 集合不能出现重复元素, 根据这个特性,我们可以用集合来去重
4.2 集合的使用
- 添加元素
set.add(元素)
set.update(集合) - 删除方法
没有del方法,因为没有索引
set.pop() 一般删除最后一个
set.remove() 指定元素进行删除
set.clear() 清空
4.3 集合的运算
& 交集运算
| 并集运算
- 差集运算
^ 亦或集 #找没有相同的
<= 检查⼀个集合是否是另⼀个集合的⼦集
< 检查⼀个集合是否是另⼀个集合的真⼦集
>=检查⼀个集合是否是另⼀个集合的超集
>检查⼀个集合是否是另⼀个集合的真超集
5.作业
5.1 a = {“name”:“123”,“data”:{“result”:[{“src”:“python1”},{“src”:“python2”},{“src”:“python3”}]}} 找到python1/python2/python3
a = {"name":"123",
"data":{"result":[{"src":"python1"},{"src":"python2"},{"src":"python3"}]}
}
# 找到python1/python2/python3
q = a["data"]["result"][0]["src"]
w = a["data"]["result"][1]["src"]
e = a["data"]["result"][2]["src"]
print(q)
print(w)
print(e)
有如下值列表[11,22,33,44,55,66,77,88,99,90], 将所有⼤于66的值保存⾄字典的第⼀个key的值中,将⼩于66值保存⾄第⼆个key的值中。
a = [11,22,33,44,55,66,77,88,99,90]
list1 = []
list2 = []
dict = {}
for i in a:
if i > 66:
list1.append(i)
elif i < 66:
list2.append(i)
dict['key1'] = list1
dict['key2'] = list2
print(dict)