07-元组与字典

元组与字典

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}

定义字典

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值