一.元组-tuple
特殊的序列,了解基本的使用即可
元组是一组不可变的序列,用()来创建,逗号分割,支持下标切片等操作 , 列表会预留空间,所以可以增加元素,如果变量数量固定,建议使用元组,占用空间可能更小
列表: [1,2]
元组: (1,2)
- 是一个容器,存储各种类型元素 ,可以联想另外一种不可变的序列
- 遵循序列的使用方式,每个元素都有唯一的位置,称为索引
- 内容不可变
1.创建
- 直接赋值
- 使用tuple函数
2.基本使用
- 循环遍历
- 查询
- 切片
date = (1,False,1,'张无忌')
print(f"序列访问:{date[1:3]}") # 序列访问1到3的位置
date2 = tuple(['哈哈', 1])
# 如果元组是单个元素,需要在该元素后面添加一个逗号
date3 = ('哈哈')
print(f"单个元组:{date3},没有逗号的类型:{type(date3)}")
date3 = ('哈哈',)
print(f"单个元组:{date3},有逗号的类型:{type(date3)}")
# 特殊写法
date4 = 1,2
a, b, = 1, 2
#也是元组,一一对应
# 遵循序列的使用方式
print(f'序列访问:{date[1]}')
print(f'序列访问:{date[1:3]}') # 算1不算3
for i in date:
print(i)
#一一打印
# 元组不可变
# eg:改变
# date[3] = '彭于晏'
print(f'访问data2: {date2}')
print(f'访问data3: {date3},访问他的类型: {type(date3)}')
print(f'访问data4: {date4},访问他的类型: {type(date4)}')
print(f'a={a},b={b}')
# 只支持常规的查询操作
print(f'查询操作count:{date.count("张无忌")}')
print(f'查询操作index:{date.index("张无忌")}')
二.字典-dict
2 先来看一组数据
一个人的信息包含:
'姓名': "彭于晏"
'年龄': 18,
'身高': '181cm',
'爱好': ['篮球', '麻将','钓鱼]
name = '彭于晏'
age = 18
height = '181cm'
hobby = ['篮球', '麻将','钓鱼']
如果数据变成多个人?
2.1 更加高效的定义方式
人的信息 = {
'姓名': '彭于晏',
'年龄': '18',
'身高': '178cm',
'爱好': ['篮球', '麻将','钓鱼']
}
这种数据定义的方式就是字典!
2.2 字典的定义
观察发现字典的结构.
字典名 = {
'key名' : 'value名' ,
'key名' : 'value名',
....
}
- 字典是一个无序(没有索引)、可变的容器
- 由键和值组成 键为key 值为value
- 可以存储任意数量的数据,每一组数据都有唯一的键值,键和值之间: 使用 : 隔开
- 字典使用符号"{}" 表示
- key: key不可变,可以使用数字,字符串,元组,不能使用列表,而且是唯一的
- value: value可以重复,可以是任何数据类型
2.3 创建字典
- 创建字典
- 字典的基本特征: key不可变,并且唯一, value可以重复
- 其他方式
# 1.直接创建
person = {
'name': '令狐冲',
'age': 20,
'name': '宋江',
'学科': ['计算机导论', '计算机组成原理', '线性代数']
}
# 出现了两个'name',那么第二个name将会将第一个name的值替换
# ① key是唯一的,如果出现同名的key,后面的会覆盖前面的数据
# ② value是可以重复的
# ③ 无序,无法使用索引的方式访问数据
# ④ 访问数据的方式: 字典名[key] 或者 字典名.get(key)
print(f"访问字典1:{person['age']}")
print(f"访问字典2:{person.get('age')}")
print(f"访问字典2:{person['学科'][1]}")
print(f'访问字典3: {person["学科"][1]}')
# 如何计算个数: len() 或者循环累加
print(f"计算元素的个数:{len(person)}")
# 2.修改元素
# 列表通过索引去定位
data = ['哈哈']
data[0] = '嘿嘿'
# 字典通过key去定位
person['age'] = 30
print(person)
2.4 常用函数
- 新增: 构建一个不存在key,相当于增加
- 删除:
- 根据指定的key删除: pop(key)
- 清空字典: clear()
- 删除尾部元素: popitem()
- 修改: 给已经存在的key重新赋值,相当于更新
- 查询: 字典名[key]和字典名get(key)
beauty = {
'name':'张欣怡',
'age': 19
}
# 1.新增和更新
# ①如果添加同名key,则会更新原有key的数据
# ②如果添加不存在的key,则会添加元素
beauty['age'] = 18
beauty['类型'] = '爱搞怪'
print(f'添加以后字典的元素: {beauty}')
# 2.删除元素
# ① pop(key):删除指定key的元素
beauty.pop('age')
print(f"使用pop删除元素后:{beauty}")
# ② popitem() : 删除末尾的元素
beauty.popitem()
print(f"使用pop删除元素后:{beauty}")
# clear:清空
beauty.clear()
print(f"使用pop删除元素后:{beauty}")
2.5 案例演示
① 学籍注册管理
- 学生有: 学号/姓名/年龄/性别等信息
- 注册学生信息
"""
@FileName: 学籍注册.py
代码的需求逻辑:
1.学生的信息: name,学号,年龄,专业
2.注册学生信息
3.如果该学生已经注册,提示'已注册'
4.可以提前终止注册流程
{
'学号1': {'name':'王麻子', 'age':18, '专业':'计算机科学与技术'},
'学号2': {'name':'李大嘴', 'age':18, '专业':'计算机科学与技术'},
'学号3': {'name':'王大锤', 'age':18, '专业':'计算机科学与技术'}
}
[
['学号1','王麻子1', 18, '计算机科学与技术'],
['学号2','王麻子2', 18, '计算机科学与技术'],
['学号3','王麻子3', 18, '计算机科学与技术']
]
"""
stu_ms = {}
while True:
num = input("请输入您的学号或者输入Q退出")
if num == 'Q':
break
else:
# 4.针对输入的q.判断是否已经被注册
if num in stu_ms.keys():
print("该学生已注册")
else:
# 5.没有注册过,则可以注册
# stu_ms[num] ={
# 'name': input('请输入您的姓名:'),
# 'age':18,
# '专业':'计算机科学与技术'
# }
stu_ms[num] = {}
stu_ms[num]['name'] = input("请输入您的姓名:")
stu_ms[num]['age'] = input("请输入您的年龄:")
stu_ms[num]['专业'] = input("请输入您的专业:")
print(stu_ms)
stu_ms = {}
while True:
num = input("请输入您的学号,输入Q退出:")
if num == "Q":
break
else:
if num in stu_ms.keys():
print("该学生已注册")
else:
stu_ms[num]= {
'name':input("请输入您的姓名"),
'age':input("请输入您的年龄"),
'专业':input("请输入您的专业:")
}
print(stu_ms)
2.6 循环遍历
- 获得所有的key: 字典名.keys()
- 获得所有的键值对: 字典名.items()
- 获得所有的value: 字典名.values()
hero = {
'name': '庄周',
'blood': 100,
'style': '肉坦法师'
}
# 1.直接使用for循环相当于依次获取字典的key
for i in hero:
print(f"字典的key:{i},字典的value:{hero[i]}")
# 1的变种方式: 获得所有的key--> 字典.keys()
# for i in hero.keys():
# print(f'字典的key: {i},字典的value: {hero[i]}')
print('-' * 50)
# 2.获得所有的value:--->字典.values(
for i in hero.values():
print(f"获得的value值:{i}")
print('-' * 50)
# 3.获得所有的键值对: ---> 字典.items()
# 获得每一组值
for i in hero.items():
print(f'字典的key: {i[0]}, value: {i[1]}' ) # 0代表key 1代表value
for i, j in hero.items():
print(f'字典的key: {i}, value: {j}')
2.7 字典推导式-[选择使用]
{ key表达式: value表达式 for 变量 in 容器 if 条件}
- key和value的表达式可以根据变量来获得
- 如果业务复杂,不建议使用
key表达式: value表达式 for 变量 in 容器 if 条件}
# 回忆列表推导式
data_1 = [i for i in range(3)]
print(f'新的列表: {data_1}')
# 字典 = {key: value for 变量 in 可遍历数据 if 条件}
data_2 = {i: '哈哈' for i in range(3)}
# data_2 = {i: '哈哈'+i for i in range(3)}
print(f'新的字典: {data_2}')
# 需求:获得一个新字典,根据data_3,要求所有的key变成大写
data_3 = {'a': 1, 'B': 3, 'c': 4}
data_4 = {i.upper(): j for i, j in data_3.items()}
print(data_4)
3 字典的相加
存在一个字典,要将其值相加
my_list = {'a':1,'b':2,'c':3}
sum = 0
for i in my_list.values():
sum += i
print(sum)
sti = {'a':[1,2],'b':[3,4]}
total = 0
for key in sti:
for element in sti[key]:
total += element
print(total)
3.1 获取值,并存入列表
dic_1 = { 'python': 95, 'java': 99, 'c': 100}
# 6. 获取所有的value值,存储在列表里
value_li = (c for c in dic_1.values())
key_list = list(dic_1.keys())
print(f"value值:{key_list}")
valuess = []
for j in dic_1.values():
valuess.append(j)
print(f'获得的value值:{valuess}')