2021.5.6课堂总结和作业

本文详细介绍了Python中列表的相关函数和方法,包括max、min、sum、len、sorted等,以及列表推导式和元组的概念与操作。同时,给出了课堂作业,涉及列表排重、列表推导式应用以及元组元素的获取。还讲解了如何利用列表推导式处理数据,以及对字典的认识。

2021.05.06课堂总结和作业

列表相关函数和方法

1、列表(序列)相关函数:max,min,sum,len,sored,reversed,list
max(序列) - 获取序列中最大的元素(序列中的元素本身必须支持比较运算,并且元素之间可以比较大小)

nums = [89, 23, 45, 890, 82, 12, 40]
print(max(nums))   # 890

min(序列) - 获取序列中最小元素

print(min(nums))        # 12

sum(序列) - 求序列中所有元素的和(序列中的元素必须是数字)

print(sum(nums))
print(sum(range(1, 101)))

len(序列) - 求序列中元素个数

print(len([10, 20, 'abc', [10, 20], range(3)]))

sorted(序列) - 将序列中的元素从小到大排序,返回一个排完序以后的新列表
sorted(序列,reverse=True) - 将序列中的元素从大到小排序,返回一个排完序以后的新列表

nums = [89, 23, 45, 890, 82, 12, 40]
new_nums = sorted(nums)
print(nums,new_nums)
new_nums = sorted(nums,reverse=True)
print(new_nums)

reversed(序列) - 将序列中元素倒序,产生一个新的迭代器(序列)

nums = [89, 23, 45, 890, 82, 12, 40]
nums = [89, 23, 45, 890, 82, 12, 40]
new_nums = reversed(nums)
print(new_nums)   # <list_reverseiterator object at 0x108c586d0>

切片倒序

print(nums[::-1])    # [40, 12, 82, 890, 45, 23, 89]

list(序列) - 将其他序列转换成列表

print(int(2.9), int(True), int(False), int('-456'), float('3e4'))
print(list('abc'))     # ['a', 'b', 'c']
print(list(range(1, 3)))
print(list(new_nums))       # [40, 12, 82, 890, 45, 23, 89]

2.列表相关方法
1)列表.clear() - 清空列表

names = ['罗小黑战记', '海贼王', '一人之下', '进击的巨人', '死亡笔记']
names.clear()
print(names)    # []

2)列表.copy() - 复制原列表产生一个一模一样的新列表

names = ['罗小黑战记', '海贼王', '一人之下', '进击的巨人', '死亡笔记']
names2 = names
new_names = names.copy()
print(new_names)    # ['罗小黑战记', '海贼王', '一人之下', '进击的巨人', '死亡笔记']

names.pop()
print(names)    # ['罗小黑战记', '海贼王', '一人之下', '进击的巨人']
print(names2)   # ['罗小黑战记', '海贼王', '一人之下', '进击的巨人']
print(new_names)    # ['罗小黑战记', '海贼王', '一人之下', '进击的巨人', '死亡笔记']

3)列表.count(元素) - 统计指定元素在列表中出现的次数

names = ['罗小黑战记', '海贼王', '一人之下', '进击的巨人', '死亡笔记', '海贼王', '海贼王']
print(names.count('死亡笔记'))   # 1
print(names.count('死神'))   # 0
print(names.count('海贼王'))   # 3

4)列表.extend(序列) - 将序列中的所有元素添加到列表当中

names = ['罗小黑战记', '海贼王', '一人之下', '进击的巨人', '死亡笔记']
names.extend(['妖精的尾巴', '火影忍者'])
print(names)   # ['罗小黑战记', '海贼王', '一人之下', '进击的巨人', '死亡笔记', '妖精的尾巴', '火影忍者']

5)列表.index(元素) - 获取指定元素对应的下标(从0开始的下标)

names = ['罗小黑战记', '海贼王', '一人之下', '进击的巨人', '死亡笔记', '海贼王']
print(names.index('海贼王'))

6)列表.reverse() - 将列表倒序(不会产生新的列表)

names = ['罗小黑战记', '海贼王', '一人之下', '进击的巨人', '死亡笔记', '海贼王']
names.reverse()
print(names)    # ['海贼王', '死亡笔记', '进击的巨人', '一人之下', '海贼王', '罗小黑战记']

7)列表.sort() - 将列表元素从小到大排序

nums = [78, 90, 67, 56, 99]
new_nums = nums.sort()
print(nums)    # [56, 67, 78, 90, 99]
print(new_nums)    # None

列表推导式

列表推导式 - 用来创建列表的表达式
推导式的应用:创建列表,元素筛选,元素的变换
1.推导式通用格式1
[表达式 for 变量 in 序列 ]
创建列表的原理:
list1=[]
for 变量 in 序列:
​ list.append(表达式)

list1 = [x for x in range(4)]
print(list1)

list2 = [2*x + 3 for x in range(4)]
print(list2)   # [3, 5, 7, 9]
list3 = [x*2 for x in 'abc']
print(list3)

# 练习:已知列表scores = [89, 34, 56, 23, 90, 100],将列表中的成绩转换成十分制的值
# scores = [89, 34, 56, 23, 90, 100] -> [8.9, 3.4, 5.6, 2.3, 9.0, 10.0]
scores = [89, 34, 56, 23, 90, 100]
new_scores = [x/10 for x in scores]
print(new_scores)

2.推导式通用格式2
[表达式 for 变量 in 序列 if 条件语句]
原理:
list1 = []
for 变量 in 序列:
​ if 条件语句:
​ list1.append(表达式)

nums = [23, 89, 98, 67, 23, 44, 60]
new_nums = [x for x in nums if x % 2 == 1]
print(new_nums)
# 练习:删除列表中所有的空值和0值
list1 = [12, 'abc', True, 0, 0.00, 0.02, '', [], [1, 2]]
# -> [12, 'abc', True, 0.02, [1, 2]]
new_list1 = [x for x in list1 if x]
print(new_list1)

3.补充:三目运算符
1)C的三目运算:
表达式1?表达式2:表达式3 -> 如果表达式1的值是0整个运算表达式的结果是表达式3,
否则整个运算表达式的值是表达式2
Python:变量 = 表达式2 if 表达式1 else 表达式3

age = 7
result = '成年' if age >= 18 else '未成年'
print(result)
# 练习:scores = [89, 34, 56, 23, 90, 100]  ->  ['及格', '不及格', '不及格', '及格', '及格']
scores = [89, 34, 56, 23, 90, 100]
new_scores=['及格' if x >= 60 else '不及格' for x in scores] 
print(new_scores)

推导式整理

  1. 整体变换 - 将原序列中的元素通过统一的规则转换成一个新的序列
    方案: [表达式 for 变量 in 序列] - 表达式用来描述新序列中的元素和原序列元素之间的规则
nums = [23, 789, 90, 67, 22, 31]
result = [x % 10 for x in nums]
print(result)   # [3, 9, 0, 7, 2, 1]

2.部分变换(按照两种不同的方式变换)
方案:[三目运算 for 变量 in 序列]

list1 = [23, 'abc', 78, '234', 1.23, [10, 30]]
# x*10, x
result = [x*10 if type(x) in [int, float] else x for x in list1]
print(result)  # [230, 'abc', 780, '234', 12.3, [10, 30]]

3.筛选,删除
方案:[表达式 for 变量 in 序列 if 条件语句]

scores = [89, 33, 67, 8, 98, 23, 66, 81]
result = [x for x in scores if x >= 60]
print(result)   # [89, 67, 98, 66, 81]

元组

1.什么是元组(tuple)
元组是容器型数据类型(序列),将()作为容器标志里面多个元素用逗号隔开:(元素1,元素2,元素3,…)
元组是不可变的(不支持增删改)、元组是有序(支持下标操作)
任何类型的数据都可以作为元组的元素
1)t1=() - 空元组
2)只有一个元素的元组:元素后面的逗号不能省

l1 = [100]
print(l1, type(l1))   # [100] <class 'list'>

t2 = (100)
print(t2, type(t2))     # 100 <class 'int'>
t3 = (100,)
print(t3, type(t3))    # (100,) <class 'tuple'>

3)普通元组

t4 = (10, 12.9, 'abc', 10)
print(t4, type(t4))

2。元组就是不可变的列表
列表中凡是和增删改不相关的操作元组都支持
1)查

t5 = ('肖申克的救赎', '阿甘正传', '霸王别姬', '美丽人生', '黑客帝国', '触不可及', '这个杀手不太冷', 'V字仇杀队')
print(t5[1])
print(t5[-1])
# print(t5[100])   # IndexError: tuple index out of range

print(t5[1:])   # ('阿甘正传', '霸王别姬', '美丽人生', '黑客帝国', '触不可及', '这个杀手不太冷', 'V字仇杀队')
print(t5[3:0])  # ()
print(t5[2:-2:2])   # ('霸王别姬', '黑客帝国')

for x in t5:
    print('x:', x)

for index in range(len(t5)):
    print(index, t5[index])

# 2) +、*、in、not in
# l1 = [1, 2, 3]
# result = l1 + [10, 20]
# print(result, l1)
t6 = (10, 20)
print(t6 + (100, 200))    # (10, 20, 100, 200)

print(t6 * 3)       # (10, 20, 10, 20, 10, 20)

print(1 in t6)    # False
print(10 in t6)     # True

3)max,min,sum,sorted,reversed,len,tuple

scores = (98, 78, 67, 56, 23, 45, 99, 82, 86, 99)
print(max(scores))
print(min(scores))
print(sum(scores))
print(sorted(scores))    # [23, 45, 56, 67, 78, 82, 86, 98, 99]
print(tuple('abc'))   # ('a', 'b', 'c')
print(tuple([10, 230, 4]))   # (10, 230, 4)

4)相关方法:count,index

print(scores.count(99))   # 2
print(scores.index(56))     # 3

3.元组不只是不可变列表
1)元组在()没有歧义的情况下可以去掉(元组特有的)

t1 = 10, 20, 30
print(t1, type(t1))   # (10, 20, 30) <class 'tuple'>

t2 = 10, 20, 30 * 2
print(t2)

2)获取元组元素:让变量个数和元组中元素个数一致(列表和元素都支持)

point1 = (10, 98)
# print(point1[0], point1[1])
x, y = point1
print(x, y)   # 10 98

point2 = (-19, 89, 29)
x, y, z = point2
print(x, y, z)   # -19 89 29
  1. 获取元组元素:让变量个数小于元组中元素的个数,但是必须在某一个变量前加* (列表和元组都支持)
    先让不带的变量按照位置去获取元组中的元素,然后让剩下的元素全部作为一个列表返回给带的变量
t2 = (100, 200, 'abc', '男', True, 300)
*x, y, z = t2
print(y, z)    # True 300
print(x)       # [100, 200, 'abc', '男']

x, y, *z = t2
print(x, y)    # 100 200
print(z)       # ['abc', '男', True, 300]

x, *y, z = t2
print(x, z)     # 100 300
print(y)        # [200, 'abc', '男', True]

x, *y, z, t = t2
print(y)    # [200, 'abc', '男']

认识字典

# 定义一个变量保存一个学生的信息
stu1 = ['小明', 18, 170, 74, 80, '男']
print(stu1[0])

stu1 = {'姓名': '小明', 'age': 18, 'height': 170, 'weight': 74, 'score': 80, '性别': '男'}
print(stu1['姓名'])

students = [
    {'name': '小明', 'age': 18, 'tel': '128272'},
    {'name': '张三', 'age': 20, 'tel': '23423'},
    {'name': '小明', 'age': 38, 'tel': '34523452'},
    {'name': '小明', 'age': 18, 'tel': '23453'}
]

作业

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]
nums = [70, 88, 91, 70, 107, 234, 91, 177, 282, 197]
for x in nums:
    if nums.count(x) > 1:
        nums.remove(x)
print(nums)
new_nums = sorted(nums, reverse=True)
print( new_nums)

2.利用列表推导式, 完成以下需求
a. 生成一个存放1-100中各位数为3的数据列表
结果为 [3, 13, 23, 33, 43, 53, 63, 73, 83, 93]

list = [x for x in range(101) if x % 10 ==3]
print(list)

b. 利用列表推导式将列表中的整数提取出来
例如:[True, 17, “hello”, “bye”, 98, 34, 21] — [17, 98, 34, 21]

list1 = [True, 17, "hello", "bye", 98, 34, 21]
new_list1 = [x for x in list1 if type(x) == int]
print(new_list1)

c.利用列表推导式 存放指定列表中字符串的长度

例如: ["good", "nice", "see you", "bye"] --- [4, 4, 7, 3]
list = ["good", "nice", "see you", "bye"]
new_list = [len(x) for x in list]
print(new_list)

d. 利用列表推导式删除列表中整数个位数小于5的元素

例如:[24, 'abc', 99, True, 21, 38, 'hello'] --- ['abc', 99, True, 38, 'hello']
list = [24, 'abc', 99, True, 21, 38, 'hello']
# 方案: [表达式 for 变量 in 序列 if 条件语句]
new_list = [x for x in list if (type(x) == int and x % 10 > 5) or type(x)!= int]
print(new_list)

e. 利用列表推导式获取元素是元组的列表中每个元组的最后一个元素

例如:[(10, 20, 30), ('abc', 'hello'), (1, 2, 3.4), (True, False)]  --- [30, 'hello', 3.4, False]
list = [(10, 20, 30), ('abc', 'hello'), (1, 2, 3.4), (True, False)]
new_list = [x[-1] for x in list]
print(new_list)

3.已知代码如下,请回答出各个print的结果 并说明原因

nums = [17, 39, 28, 51]
nums2 = nums
nums2.pop()
print(len(nums)) # 这个结果是什么   请描述原因
# 结果:3,原因:nums2.pop():取出列表最后一个元素,并且返回,即取出最后一个元素51,nums=[17,39,28]
#               print(len(nums)):len(序列) 求序列中元素的个数,即打印nums=[17,39,28]的个数,结果为3
numlist = [17, 22, 39, 58, [55, 43]]
nums3 = numlist.copy()
print(numlist is nums3) # 结果  原因是什么
# 结果:False ; 原因:列表.copy()-复制原列表产生一个一模一样的新列表,但是不改变原来的列表。
numlist[-1][0] = 99
print(nums3) # num3会不会发生变化
# 会发生变化

4(试一下). 定义一个列表,在列表中保存6个学生的信息(学生信息中包括: 姓名、年龄、成绩(单科)、电话、性别(男、女、不明) )
a.统计不及格学生的个数
b.打印不及格学生的名字和对应的成绩
c.统计未成年学生的个数
d.打印手机尾号是8的学生的名字
e.打印最高分和对应的学生的名字

​ f.删除性别不明的所有学生

​ g.将列表按学生成绩从大到小排序(挣扎一下,不行就放弃)

students = [
    {'name': '小王','age': 21, 'score':55,'tel': '1282571','gender':'男'},
    {'name': '小宋', 'age': 18, 'score':70,'tel': '128788','gender':'男'},
    {'name': '小孟', 'age': 23, 'score':46,'tel': '128994','gender':'男'},
    {'name': '小李', 'age': 16, 'score':87,'tel': '128927','gender':'女'},
    {'name': '小贺', 'age': 25, 'score':66,'tel': '128116','gender':'男'},
    {'name': '小郭', 'age': 17, 'score':59,'tel': '128288','gender':'女'},
    ]
# a.统计不及格学生的个数
count = 0
for x in students:
    if x['score'] <60:
        count += 1
print('不及格学生的个数:',count)
# b.打印不及格学生的名字和对应的成绩
for x in students:
    if x['score'] <60:
        print('不及格学生的名字:',x['name'],'成绩',x['score'])
# c.统计未成年学生的个数
count = 0
for y in students:
    if y['age'] <18:
        count += 1
print('未成年学生的个数:', count)
# d.打印手机尾号是8的学生的名字
for z in students:
    if int(z['tel']) % 10 == 8:
        print('手机尾号是8的学生的名字',z['name'])
e.打印最高分和对应的学生的名字
f.删除性别不明的所有学生
g.将列表按学生成绩从大到小排序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值