一、元组
Python的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。
元组也是容器型数据类型 , 将()作为容器的标志,多个元素之间用逗号隔开:(元素1,元素2,元素3)
元组不可变(不支持增删改);元组是有序的(支持下标操作)
元素没有什么要求
空元组:()
tuple = ()
print(type(tuple)) # <class 'tuple'>
空元组:()
tuple = ()
print(type(tuple)) # <class 'tuple'>
多个元素的元组
tuple1 = (10, 20, 30)
print(type(tuple1)) # <class 'tuple'>
变量 = 元素1,元素2,元素3,元素4,元素5
tuple2 = 1, 2, 3, 4, 5, 6, 7
print(type(tuple2)) # <class 'tuple'>
获取元组中的元素
- 获取单个
tuple2 = 1, 2, 3, 4, 5, 6, 7
print(tuple2[3]) # 4
- 切片多个
tuple2 = 1, 2, 3, 4, 5, 6, 7
print(tuple2[1:4]) # (2, 3, 4)
- 遍历
for i in tuple2:
print(i) # 1234567
for i in range(len(tuple2)):
print(tuple2[i]) # 1234567
- 变量1 变量2 变量3… = 元组 注意:在这儿变量的个数要和元组中的元素的个数要保持一致
tuple3 = (10, 20, 30)
x, y, z, = tuple3
print(x, y) # 10 20
- 变量1 变量2 变量3… = 元组 前面变量的个数小于元组的个数 ,并且有且只有一个变量前有*
tuple3 = (10, 20, 30, 40, 50)
x, *y = tuple3
print(x, y) # 10 [20, 30, 40, 50]
二、字典
字典是容器型数据类型,将{}作为容器的标志,多个元素用逗号合开(字典的元素都是键值对):{键1:值1,键2,值2}
字典是可以变的 ,支持增删改查,字典是无序的 ,不支持下标操作
字典中的元素: 键值对
键 - 不可变:唯一 、 一般都是字符串
值 - 任何类型的数据
每个字典里的key都是唯一的,如果出现了多个key,后面的value会覆盖前一个key对应的value.
获取单个元素对应的值
stu1 = {'name': '张三', 'age': 30, 'gender': '男', 'id': 10011,
'height': 170, 'scoer': 98}
print(stu1['gender']) # 男
print(stu1['height']) # 170
-
字典.get(key) - 获取字典中指定的key对应的值(如果key不存在不会报错,返回None) 。字典.get(key,默认值) - 获取字典中指定的key对应的值(如果key不存在返回默认值)
stu1 = {'name': '张三', 'age': 30, 'gender': '男', 'id': 10011,
'height': 170, 'scoer': 98}
print(stu1.get('weight')) # None
print(stu1.get('weight', 65)) # 65
遍历
- for 变量 in 字典:
循环体
注意 :变量取到的是字典中所有的key
stu1 = {'name': '张三', 'age': 30, 'gender': '男',
'id': 10011, 'height': 170, 'scoer': 98}
for i in stu1:
print(i, stu1[i])
- for 变量 字典.values():
循环体
变量取到的是字典所有的值
stu1 = {'name': '张三', 'age': 30, 'gender': '男',
'height': 170, 'scoer': 98}
for i in stu1.values():
print(i)
- for 变量1 ,变量2 in 字典.items():
循环体
变量1能取到字典所有的key,变量2取到的是字典所有的值
stu1 = {'name': '张三', 'age': 30, 'gender': '男',
'height': 170, 'scoer': 98}
for x, y in stu1.items():
print(x, y)
增 、改
- 语法1 :
字典[key] = 值
如果Key存在 ,就将 key 对应的值修改成指定的值(改)
如果key不存在,以‘key :值’ 的形式添加一个键值对(增)
stu1 = {'name': '张三', 'age': 30, 'gender': '男',
'height': 170, 'scoer': 98}
stu1['age'] = 28
print(stu1)
# {'name': '张三', 'age': 28, 'gender': '男',
'height': 170, 'scoer': 98}
stu1 = {'name': '张三', 'age': 30, 'gender': '男',
'height': 170, 'scoer': 98}
stu1['weighi'] = 65
print(stu1)
# {'name': '张三', 'age': 30, 'gender': '男',
'height': 170, 'scoer': 98, 'weighi': 65}
- 语法2 :
字典.setdefault =(键, 值)
如果Key存在 ,就不变
如果key不存在,以‘key :值’ 的形式添加一个键值对
stu1 = {'name': '张三', 'age': 30, 'gender': '男', 'height': 170, 'scoer': 98}
stu1.setdefault("weight", 60)
print(stu1)
删
- del
del 字典[key] - 删除指定key对应的键值对 ,key 不存在会报错
stu1 = {'name': '张三', 'age': 30, 'gender': '男', 'id': 10011}
del stu1['id']
print(stu1)
# {'name': '张三', 'age': 30, 'gender': '男'}
- pop
字典.pop(key) - 取出字典中指定key对应的值 ,并且返回被取出的值
stu1 = {'name': '张三', 'age': 30, 'gender': '男'}
stu1.pop('gender')
print(stu1)
# {'name': '张三', 'age': 30}
- clear
字典.clear() - 清空
相关方法
字典不支持加法运算和乘法运算, 比较运算字典只支持比较相等 ,不支持比较大小
print({'a': 1, 'b': 2} == {'b': 2, 'a': 1}) #True
- 数据 in 字典 – 判断字典中是否存在指定的key
- 数据 not in 字典 – 判断字典中是否不存在指定的key
cat = {'name':'花花','age':2,'color':'白色'}
print('name'in cat) #True
print('花花'in cat) #False
- len(字典) - 统计字典中键值对的个数
cat = {'name':'花花','age':2,'color':'白色'}
print(len(cat)) # 3
- dict(数据) - 将自定的数据转换成字典
数据的要求:1 是容器型数据类型 2 数据中元素是有且只有两个元素的容器(小容器) 3 小容器中的第一个元素是不可变的
x = [(1,2),(3,4),(5,6)]
dict1 = dict(x)
print(dict1)
# {1: 2, 3: 4, 5: 6}
- 字典转换成其它的数据类型
bool(字典) — 空字典会转换成False ,其它都是True
list(字典) —将字典所有的key作为列表的元素
tuple(字典) —将字典所有的key作为列表的元素
cat = {'name':'花花','age':2,'color':'白色'}
print(list(cat))
- dict.fromkeys(序列) - 创建一个新的字典,字典中的key是序列中的元素,值是None
dict.fromkeys(序列,值) - 创建一个新的字典,字典中的key是序列中的元素,值是指定的值
dict2 = dict.fromkeys(['name','age','gender','score'])
print(dict2)
dict2 = dict.fromkeys(['name','age','gender','score'],0)
print(dict2)
- 字典.update(序列) - 用序列生成的字典去更新原字典,方式 不存在就添加 ,存在就修改
三、集合
集合是容器型数据类型 ,将{}作为容器的标志,里面多个元素用逗号隔开:{元素1,元素2,元素3}
集合是可变的(支持增删改) 集合是无序的
集合中元素是不可变的并且唯一的
- 空集合
set()
查
-
集合没有办法直接获取单个元素,只能遍历
for 变量 in 集合: 循环体 变量取到的就是集合中每个元素 nums = {23, 24, 89, 90} for i in nums: print(i)
增
- 集合.add(元素) - 往集合中随机位置添加指定元素
- 集合.update(序列) - 将序列中的元素全部添加到集合
nums.add(100)
print(nums)
nums.update('abc')
print(nums)
删
- 集合.remove(元素) - 删除集合中指定的元素(元素不存在报错)
- 集合.discard(元素) - 删除集合中指定的元素(元素不存在不会报错)
nums = {23, 24, 89, 90}
nums.remove(24)
print(nums)
# {89, 90, 23}
nums.discard(88)
print(nums)
# {89, 90, 23}
集合无法修改
数学集合运算
python中的集合支持数学集合运算:&(求交集)、|(求并集)、-(求差集)、^(对称差集)、>/<(判断是不是真子集)
set1 = {1, 2, 3, 4, 5, }
set2 = {4, 5, 6, 7, 8, 9}
print(set1 & set2)
# 两个集合公共部分 {4, 5}
print(set1 | set2)
# 两个集合合并成一个 {1, 2, 3, 4, 5, 6, 7, 8, 9}
print(set1 - set2)
# 集合1-集合2 集合1中除了集合2剩余的部分 {1,2,3}
print(set2 - set1)
# 集合2-集合1 集合2中除了集合1剩余的部分 {1,2,3}
print(set1 ^ set2)
# 去掉两个集合公共的部分,剩余的部分 {1, 2, 3, 6, 7, 8, 9}
print(set1 > set2)
# 判断集合2是否是集合1的真子集
print(set1 < set2)
# 判断集合1是否是集合2的真子集