元组与字典
1.相关函数
1.max、min - 求最大值、最小值
# max(序列) / min(序列)
nums = [34, 89, 78, 56, 90, 23]
print(max(nums), min(nums))
2.sum - 求数字序列中元素的和
# sum(序列)
nums = [34, 89, 78, 56, 90, 23]
print(sum(nums))
3.len() - 求序列长度,获取序列中元素个数
# len(序列)
4.sorted - 排序
# sorted(序列) - 从小到大,,不修改原系列中元素顺序而是产生一个新的序列
# sorted(序列,reverse=True) - 从大到小
nums = [34, 89, 78, 56, 90, 23]
new_nums = sorted(nums)
print(nums) # [34, 89, 78, 56, 90, 23]
print(new_nums) # [23, 34, 56, 78, 89, 90]
# 列表.sort()
nums = [34, 89, 78, 56, 90, 23]
result = num.sort()
print(nums) # [23, 34, 56, 78, 89, 90]
print(result) # None
5.list - 列表类型转换
# list(序列) - 所有的序列都可以转换成列表,转换的时候,将序列中的元素转换成列表的元素即可
print(list('abc')) # ['a', 'b', 'c']
print(list(range(3))) # [0, 1, 2]
print(list(enumerate(nums))) # [(0, 23), (1, 34), (2, 56), (3, 78), (4, 89), (5, 90)]
2.列表推导式
# 1.列表推导式 - 本质是创建列表的表达式(简洁)
'''
结构一:
[表达式 for 变量 in 序列]
结构二:
[表达式 for 变量 in 序列 if 条件语句]
'''
# 取个位数
nums = [89, 34, 56, 67, 78, 90]
list_1 = [item % 10 for item in nums]
print(list_1) # [9, 4, 6, 7, 8, 0]
# 取合格成绩
list_2 = [item for item in nums if item >= 60]
print(list_2) # [89, 67, 78, 90]
# 2.推导式的应用
'''
应用1:让序列中的所有元素进行统一变换
[表达式 for 变量 in 序列]
应用2:将序列中满足某个条件的元素进行变换(根据某个条件)
[表达式1 if 条件语句 else 表达式2 for 变量 in 序列]
应用3:提取序列中满足某个条件的元素(提取、删除)
[表达式 for 变量 in 序列 if 条件语句]
'''
# 将所有偶数除以2
nums = [89, 34, 56, 67, 78, 90, 35]
list_3 = [item if item % 2 else item // 2 for item in nums]
# 删除所有的偶数
list_4 = [item for item in nums if item % 2]
print(list_3, list_4)
3.三目运算符
# 双目运算符:+、-、*.....>、=、and、or
# 单目运算符:not
#三目运算符:if-else
# 1. C/Java语言的三目运算符:?:
'''
条件语句?表达式1:表达式2 - 如果条件语句成立整个运算结果为表达式1,反之为表达式2.
'''
# 2.python中的三目表达式
'''
表达式1 if 条件语句 else 表达式2
'''
3.元组
1.什么是元组(tuple)
'''
元组是容器型数据类型,将()作为容器的标志,里边多元素用逗号隔开;(元素1, 元素2, 元素3,....)
元组不可变(只可查);
元组是有序的,支持下标操作
元素要求:没有要求
'''
# 1)空元组
t1 = ()
print(type(t1), len(t1))
# 2)只有一个元素的元组,唯一的元素后边必须加逗号
t2 = (12)
print(t2, type(t2)) # 12 <class 'int'>
t3 = (12,)
print(t3, type(t3)) 3 (12,) <class 'tuple'>
# 3)在没有歧义的情况下,元组的小括号可以省略
t5 = 10, 23, 45
print(t5, type(t3)) # (10, 23, 45) <class 'tuple'>
2.查 - 获取元素
-
列表获取元素的方式元组都支持
nums = 10, 23, 45, 46, 76, 89 print(nums[1], nums[-5]) print('=========================================') for item in nums: print(item) print('=========================================') for index in range(len(nums)): print(index, nums[index]) print('=========================================') for index, item in enumerate(nums): print(index, nums[index])
-
通过变量获取元组的元素1,让变量的个数和元组中元素的个数保持一致
point = (10, 23, 12) x, y, z = point print(x, y, z)
-
通过变量获取元组的元素2,变量的个数小于元素的个数,必须在其中一个变量前加*
# 注:取值的时候,先按照位置关系获取元素,剩下的全部给带*的变量(以变量的形式) info = ('张三', 18, 175, 180, 90, 67, 89) name, age, *other = info print(name, age, other) # 张三 18 [175, 180, 90, 67, 89]
3.元组是不可变的列表
- +、 *
- in 和 not in
- 比较运算
- count、index
- max\min\sum\sorted\len\tuple
4.字典
1.字典的作用
# 同时保存多个意义不同的数据
stu = {
'name': '小米',
'age': 20,
'gender': '男',
}
print(stu['name'])
2.什么是字典
'''
字典是容器型数据类型,将{}作为容器标志,里面每个键值对用逗号隔开:{键值对1:键值对2:键值对3:...}
字典是可变的,(支持增删改)
字典是无序的,(不支持下标操作)
元素的要求:字典的元素是键值对
键 - 必须是不可斌的数据(数字,字符串,元组)
唯一的
值 - 没有要求
'''
# 1) 空字典
d1 = {}
print(type(d1), len(d1)) # <class 'dict'> 0
# 2) 键是不可变的数据
# 3) 键是唯一的
d4 = {'a': 10, 'b': 20, 'c': 30, 'b': 40}
print(d4) # {'a': 10, 'b': 40, 'c': 30}
# 4) 字典是无序的
3.字典的增删改
# 1. 查 - 获取字典的值
# a、获取单个值
'''
字典[键] - 获取字典中指定键对应的值,获取不存在的值时会报错
字典.get[键]/字典.get[键, 默认值] - 获取字典中指定键对应的值,获取不存在的值时会返回None或默认值
'''
dog = {'name': '旺财',
'age': 3,
'breed': '田园犬',
'gender': '母',
'color': '黄'
}
print(dog['name'])
print(dog['gender'])
print(dog.get('name'))
print(dog.get('height', 0))
# b、遍历
# 通过for循环遍历字典的时候,循环变量依次取得时字典的键
'''
for 键 in 字典:
循环体
'''
练习题
1.创建一个列表,列表中有10个舒宗, 保证列表中元素的顺序,对列表进行排重,并对列表使用进行降序排序
例如:随机生成了[70, 88, 91, 70, 107, 234, 91, 177, 282, 197]
--- 去重之后 [70, 88, 91, 107, 234, 177, 282, 197]
---- 降序排序 [282, 234, 197, 177, 107, 91, 88, 70]
list_1 = [70, 88, 91, 70, 107, 234, 91, 177, 282, 197]
for item in list_1.copy():
if list_1.count(item) > 1:
list_1.remove(item)
print(list_1)
list_1.sort(reverse=True)
print(list_1)
2.利用列表推导式, 完成以下需求
a. 生成一个存放1-100中各位数为3的数据列表
结果为 [3, 13, 23, 33, 43, 53, 63, 73, 83, 93]
list_1 = [num for num in range(3, 100, 10)]
print(list_1)
b. 利用列表推到是将 列表中的整数提取出来
例如:[True, 17, "hello", "bye", 98, 34, 21] --- [17, 98, 34, 21]
list_1 = [True, 17, "hello", "bye", 98, 34, 21]
list_2 = [item for item in list_1 if type(item) == int]
print(list_2)
c.利用列表推导式 存放指定列表中字符串的长度
例如 ["good", "nice", "see you", "bye"] --- [4, 4, 7, 3]
list_1 = ["good", "nice", "see you", "bye"]
list_2 = [len(item) for item in list_1]
print(list_2)
4.已经一个班级字典如下:
class1 = {
'name': 'python2104',
'address': '23教',
'lecturer': {'name': '余婷', 'age': 18, 'QQ': '726550822'},
'leader': {'name': '舒玲', 'age': 18, 'QQ': '2343844', 'tel': '110'},
'students': [
{'name': 'stu1', 'school': '清华大学', 'tel': '1123', 'age': 18, 'score': 98, 'linkman': {'name': '张三', 'tel': '923'}},
{'name': 'stu2', 'school': '攀枝花学院', 'tel': '8999', 'age': 28, 'score': 76, 'linkman': {'name': '李四', 'tel': '902'}},
{'name': 'stu3', 'school': '成都理工大学', 'tel': '678', 'age': 20, 'score': 53, 'linkman': {'name': '小明', 'tel': '1123'}},
{'name': 'stu4', 'school': '四川大学', 'tel': '9900', 'age': 30, 'score': 87, 'linkman': {'name': '小花', 'tel': '782'}},
{'name': 'stu5', 'school': '西南交大', 'tel': '665', 'age': 22, 'score': 71, 'linkman': {'name': '老王', 'tel': '009'}},
{'name': 'stu6', 'school': '成都理工大学', 'tel': '892', 'age': 32, 'score': 80, 'linkman': {'name': '老王2', 'tel': '0091'}},
{'name': 'stu7', 'school': '四川大学', 'tel': '431', 'age': 17, 'score': 65, 'linkman': {'name': '老王3', 'tel': '0092'}},
{'name': 'stu8', 'school': '攀枝花学院', 'tel': '2333', 'age': 16, 'score': 32, 'linkman': {'name': '老王4', 'tel': '0093'}},
{'name': 'stu9', 'school': '攀枝花学院', 'tel': '565', 'age': 21, 'score': 71, 'linkman': {'name': '老王5', 'tel': '0094'}}
]
}
1)获取班级位置
print(class1['address'])
2)获取班主任的名字和电话
print((class1['leader'])['name'], (class1['leader'])['tel'])
3)获取所有学生的姓名和分数
stu_1 = class1['students']
for x in stu_1:
print(x['name'], x['score'])
4)获取所有学生联系人的名字和电话
stu_1 = class1['students']
for x in stu_1:
linkman_1 = x['linkman']
print(linkman_1['name'], (linkman_1['tel']))
5)获取班级最高分
stu_1 = class1['students']
scores = []
for x in stu_1:
scores.append(x['score'])
print(max(scores))
6)获取班级分数最高的学生的姓名
stu_1 = class1['students']
scores = []
for x in stu_1:
scores.append(x['score'])
print(max(scores))
max_index = scores.index(max(scores))
print((stu_1[max_index])['name'])
7)计算班级学生的平均分
stu_1 = class1['students']
scores = []
for x in stu_1:
scores.append(x['score'])
average = (sum(scores)) / (len(stu_1))
print(average)
8)统计班级中未成年人数
stu_1 = class1['students']
age_1 = []
count = 0
for x in stu_1:
age_1.append(x['age'])
for i in age_1:
if i < 18:
count += 1
print(count)
9)用字典统计每个学校的人数, 类似: {'清华大学': 1, '攀枝花学院': 3}
定义字典