day05-容器型数据类型
01列表相关操作
列表1 + 列表2
– 将两个列表合并产生一个新的列表
list1 = [10, 20, 30]
list2 = [100, 200]
print(list1 + list2) # [10, 20, 30, 100, 200]
列表 * N
– 将列表中的元素重复N次产生一个新的列表
list1 = [10, 20, 30]
print(list1 * 3) # [10, 20, 30, 10, 20, 30, 10, 20, 30]
1. in 和 not in
数据 in 列表
– 判断列表中是否存在指定数据对应的元素
数据 not in 列表
– 判断列表中是否不存在指定数据对应的元素
list1 = [10, 20, 30]
print(10 in list1) # True
print(11 in list1) # False
print([10, 20] in list1) # False
# 练习:已知一个列表保存了多个学生的姓名,要求去掉列表中重复的名字
names = ['小明', '张三', '李四', '张三', '张三', '小明', '王五', '王五']
new_names = []
for x in names:
if x not in new_names:
new_names.append(x)
print(new_names) # ['小明', '张三', '李四', '王五']
2. 相关函数
max(列表)
、min(函数)
list1 = [10, 23, 45, 67, 91]
print(max(list1), min(list1)) # 91 10
sorted(列表)
– 将列表中的元素从小到大排序,产生一个新的列表
list2 = [10, 45, 56, 23, 5]
print(sorted(list2)) # [5, 10, 23, 45, 56]
list2 = [10, 45, 56, 23, 5]
print(sorted(list2, reverse=True)) # 从大到小排序
# [56, 45, 23, 10, 5]
len(列表)
– 获取列表长度(列表中元素的个数)
list2 = [10, 45, 56, 23, 5]
print(len(list2)) # 5
list(数据)
– 将指定的数据转换成列表
数据
– 必须是序列(容器型数据类型的数据)例如: 字符串、range、字典、元组
所有的序列都可以转换成列表, 转换成列表的时候, 序列中的元素就是列表中的元素
print(list('abc')) # ['a', 'b', 'c']
print(list(range(5))) # [0, 1, 2, 3, 4]
02字典
1. 字典存在的价值
# 需求: 定义一个变量保存一个学生的信息
stu = {'name': '小明', 'age': 18, '身高': 180, '体重': 70, '成绩': 80}
print(stu['name']) # 小明
结论
: 需要同时保存多个意义不同的数据就使用字典; 需要同时保存多个意义相同的数据就使用列表
2. 什么是字典(dict)
容器 | 将{} 作为容器的标志, 里面多个键值对用逗号隔开 (一个键值对就是一个元素) : {键1: 值1, 键2: 值2, …} |
---|---|
字典是可变的(支持增删改) 字典**无序 **(顺序不影响结果 ; 不支持下标操作) | |
键的要求 | a. 不可变类型的数据才能作为字典的键(数字、字符串、布尔值、空值、元组) , 一般使用字符串作为字典的键 b. 键是唯一的 |
值的要求 | 任何类型的数据都可以作为字典的值 |
# 空字典
dict1 = {}
# 字典是无序的
print({'a': 10, 'b': 20} == {'b': 20, 'a': 10}) # True
# 字典的键必须是不可变类型的数据
dict2 = {'a': 1, 7: 2, (1, 2): 5, None: 3, True: 0}
print(dict2)
# 键是唯一的
# 后来者居上(重复的键和值会被后面的键和值覆盖)
03字典的基本操作
1. 查 – 获取字典的值
注意: 字典保存数据真正想要保存的是值,键是用来对值进行区分和说明的
查单个
– 获取一个值
语法 |
---|
字典[键] 获取字典中指定键对应值 , 如果键不存在会报错 |
字典.get(键) 获取字典中指定键对应值, 如果键不存在不会报错,并且会返回空值 |
字典.get(键, 默认值) 获取字典中指定键对应的值 ; 如果键不存在不会报错 , 并且返回默认值 如果值存在就不会被默认值覆盖 |
dog = {'name': '旺财', 'age': 3, 'breed': '土狗', 'color': '黄色', 'gender': '母'}
print(dog['age']) # 3
print(dog['weight']) # 报错
print(dog.get('name')) # 旺财
print(dog.get('weight')) # None
print(dog.get('weight', '没有这个键')) # 没有这个键
print(dog.get('gender', '公')) # 母
#求所有学生成绩的总和
students = [
{'name': '小陈', 'age': 21, 'score': 95},
{'name': '小明', 'age': 18, 'score': 90},
{'name': '小王', 'age': 17, 'score': 65},
{'name': '小红', 'age': 19, 'score': 88},
{'name': '小朱', 'age': 14, 'score': 70},
{'name': '小李', 'age': 16}
]
sum2 = 0
for x in students:
sum += x.get('score', 0)
print(sum2) # 408
# 练习
class1 = {
'name': 'python2302',
'address': '11教',
'teacher': {'name': '余x', 'age': 18, 'gender': '女', 'qq': '726xx'},
'header_teacher': {'name': '舒x', 'age': 18, 'gender': '女', 'tel': '110'},
'students': [
{'name': 'stu1', 'age': 19, 'gender': '男', 'link_man': {'name': '张三', 'tel': '120'}},
{'name': 'stu2', 'age': 16, 'gender': '女', 'link_man': {'name': '李四', 'tel': '119'}},
{'name': 'stu3', 'age': 22, 'gender': '女', 'link_man': {'name': '老王', 'tel': '234'}},
{'name': 'stu4', 'age': 17, 'gender': '男', 'link_man': {'name': '赵六', 'tel': '2112'}},
{'name': 'stu5', 'age': 29, 'gender': '男', 'link_man': {'name': '邓七', 'tel': '5482'}},
{'name': 'stu6', 'age': 25, 'gender': '女', 'link_man': {'name': '王八', 'tel': '9223'}}
]
}
# 1)打印班级名称
print(class1['name'])
# 2)打印讲师的名字和qq
print(class1['teacher']['name'], class1['teacher']['qq'])
# 3)打印班主任的电话
print(class1.get('header_teacher').get('tel'))
# 4)打印所有学生的名字
for k in class1['students']:
print(k['name'])
# 5)打印所有未成年学生的名字和性别
for k in class1['students']:
if k['age'] < 18:
print(k['gender'], k['name'])
# 6)打印所有学生的联系人名字
for k in class1['students']:
print(k.get('link_man').get('name'))
# 7)计算所有男生的平均年龄
age_man = 0
count = 0
for k in class1['students']:
if k['gender'] == '男':
age_man += k['age']
count += 1
print(int(age_man / count))
遍历
– 一个一个地获取所有的值
语法:
for 变量 in 字典:
循环体(变量依次取到的是字典的键)
2. 增
字典[键] = 值 如果不存在就在字典中添加键值对 |
---|
字典.setdefault(键, 值) 在字典中添加指定键值对(键如果存在不会) |
dog = {'name': '旺财', 'age': 3, 'breed': '土狗', 'color': '黄色', 'gender': '母'}
dog['weight'] = 10
print(dog)
dog.setdefault('weight', 20)
print(dog)
# {'name': '旺财', 'age': 3, 'breed': '土狗', 'color': '黄色', 'gender': '母', 'weight': 10}
3. 改
字典[键] = 值
- 如果键存在就修改指定键对应的值
dog = {'name': '旺财', 'age': 3, 'breed': '土狗', 'color': '黄色', 'gender': '母'}
dog['name'] = '财财'
print(dog)
# {'name': '财财', 'age': 3, 'breed': '土狗', 'color': '黄色', 'gender': '母'}
4. 删 - 删除键值对
del 字典[键]
- 删除字典中指定键对应的键值对
dog = {'name': '旺财', 'age': 3, 'breed': '土狗', 'color': '黄色', 'gender': '母'}
del dog['breed']
print(dog)
# {'name': '旺财', 'age': 3, 'color': '黄色', 'gender': '母'}
字典.pop(键)
- 取走字典中指定键对应的值
dog = {'name': '旺财', 'age': 3, 'breed': '土狗', 'color': '黄色', 'gender': '母'}
result = dog.pop('color')
print(result) # 黄色
04字符串和元组
1. 字符串(str)
容器 | 将'' 或者"" 作为容器的标志, 里面的每一个符号就是字符串中的每个元素例如: ‘abc’、‘10,20,30’ |
---|---|
字符串是不可变的 字符串是有序的 支持下标操作 | |
元素 | 字符串的元素又叫字符, 分为普通字符和转义字符两种 |
print('abc') # abc
print('\taaa\nas')
# aaa
# as
2. 字符串查操作
字符串获取元素的方法和列表一样
msg = 'hello world !'
print(msg[-1]) # !
str1 = 'abc'
str2 = 'tdf'
print(str1 + str2) # abctdf
print(str1 * 3) # abcabcabc
4. 元组
元组就是不可变的列表
: (元素1, 元素2, 元素3, …)
t1 = (10, 20, 30, 40, 50)
t2 = (100, 200)
print(t1[0]) # 10
print(t1[-2]) # 40
print(t1 + t2) # (10, 20, 30, 40, 50, 100, 200)
print(100 in t2) # True