day05-容器型数据类型

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
注意 : 所有的序列都可以转换成列表
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值