总结
序列相关函数: max, min, sum, len, sorted, reversed, list
-
max - 获取最大值,需要序列中的元素本身必须支持比较运算,并且元素之间可以比较大小
nums = list(range(10)) max_num = max(nums) print(max_num) # 9
-
min - 获取最小值,需要序列中的元素本身必须支持比较运算,并且元素之间可以比较大小
nums = list(range(10)) min_num = min(nums) print(min_num) # 0
-
sum - 获取序列中所有值的和(序列中所有元素必须是数字)
nums = list(range(10)) sum1 = sum(nums) print(sum1) # 45
-
len - 统计序列中元素的个数
nums = list(range(10)) nums_len = len(nums) print(nums_len) # 10
-
sorted - 将序列中的元素从小到大排序,返回一个排完序后的新列表
import random nums = list(rang(10)) random.shuffle(nums) nums_sort = sorted(nums) print(nums, nums_sort) # [1, 6, 0, 2, 4, 3, 7, 5, 8, 9] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
-
reversed - 将序列中的元素倒序,产生一个新的迭代器
reversed_nums = reversed(nums) print(reversed_nums) # <list_reverseiterator object at 0x0000020DB4AA6640>
-
list - 将其它序列转化为列表
print(list('abc')) # ['a', 'b', 'c']
列表相关方法
-
列表.clear() - 清空列表
ls = list(range(10)) print(ls) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] ls.clear() print(ls) # []
-
列表.copy() - 复制原列表,返回一个新的一摸一样的列表
ls = [x for x in range(10)] new_ls = ls.copy() print(new_ls) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
-
列表.count(元素) - 统计列表中指定元素出现的次数
ls = [x for x in range(10)] + [x for x in range(20)] print(ls) print(ls.count(9)) # 2
-
列表.extend(序列) - 将序列中所有的元素都添加到列表中
names = ['一人之下', '海贼王', '狐妖小红娘', '死亡笔记'] names.extend(('端脑', '锦绣山河', '刺客五六七')) print(names) # ['一人之下', '海贼王', '狐妖小红娘', '死亡笔记', '端脑', '锦绣山河', '刺客五六七']
-
列表.index(元素) - 获取元素指定的下标
names = ['狐妖小红娘', '一人之下', '海贼王', '狐妖小红娘', '死亡笔记'] print(names.index('狐妖小红娘')) # 0(第一个相同元素的下标值) # print(names.index('刺客五六七')) # ValueError: '刺客五六七' is not in list names.insert(0, '铠甲勇士') print(names) # ['铠甲勇士', '狐妖小红娘', '一人之下', '海贼王', '狐妖小红娘', '死亡笔记']
-
列表.reverse() - 将列表倒序(不会产生新的列表)
names.reverse() print(names) # ['死亡笔记', '狐妖小红娘', '海贼王', '一人之下', '狐妖小红娘', '铠甲勇士']
-
列表.sort() - 将列表元素从小到大排序
names.sort() print(names) # ['一人之下', '死亡笔记', '海贼王', '狐妖小红娘', '狐妖小红娘', '铠甲勇士']
列表推导式的应用
-
[表达式 for 变量 in 序列]
''' 创建列表的原理 list1 = [] for 变量 in 序列: list1.append(表达式) ''' list1 = [x*2 + 4 for x in range(10)] print(list1) # [4, 6, 8, 10, 12, 14, 16, 18, 20, 22] list2 = [x*2 for x in 'abcdse'] print(list2) # ['aa', 'bb', 'cc', 'dd', 'ss', 'ee'] # 练习:已知列表scores = [89, 34, 56, 23, 90, 100],将列表中的成绩转化成十分制 scores = [89, 34, 56, 23, 90, 100] new_scores = [x/10 for x in scores] print(new_scores) # [8.9, 3.4, 5.6, 2.3, 9.0, 10.0]
-
[表达式 for 变量 in 序列 if 条件语句]
''' 原理: list1 = [] for 变量 in 序列: if 条件语句: list1.apppend(变量) ''' nums = [23, 89, 98, 67, 23, 44, 60] new_nums = [x for x in nums if x % 2] print(new_nums) # [23, 89, 67, 23] # 练习:删除列表中所有的空值和0值 list1 = [12, 'abc', True, 0, 0.00, 0.02, '', [], [1, 2]] list2 = [x for x in list1 if x] print(list2) # [12, 'abc', True, 0.02, [1, 2]]
-
三目运算符
''' c语言: 条件表达式 ? 表达式1 : 表达式2 ===> 如果条件表达式的结果是0则执行表达式2,否则执行表达式1 python语言: 表达式2 if 表达式1 else 表达式3 ====> 如果表达式1的结果为True则执行表达式2,否则执行表达式3 ''' # 练习:已知列表scores = [89, 34, 56, 23, 90, 100],将列表中的成绩转化成'及格'和'不及格' scores = [89, 34, 56, 23, 90, 100] grade = ['及格' if x >= 60 else '不及格' for x in scores] print(grade) # ['及格', '不及格', '不及格', '不及格', '及格', '及格']
作业
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]
new_nums = []
for num in nums:
if num not in new_nums:
new_nums.append(num)
new_nums.sort(reverse=True)
print(new_nums)
2.利用列表推导式, 完成以下需求
a. 生成一个存放1-100中各位数为3的数据列表
结果为 [3, 13, 23, 33, 43, 53, 63, 73, 83, 93]
list1 = [x for x in range(3, 100, 10)]
print(list1)
b. 利用列表推到是将 列表中的整数提取出来
例如:[True, 17, "hello", "bye", 98, 34, 21] --- [17, 98, 34, 21]
ls = [True, 17, "hello", "bye", 98, 34, 21]
list1 = [x for x in ls if type(x) == int]
print(list1)
c.利用列表推导式 存放指定列表中字符串的长度
例如: ["good", "nice", "see you", "bye"] --- [4, 4, 7, 3]
ls = ["good", "nice", "see you", "bye"]
list1 = [len(x) for x in ls]
print(list1)
d. 利用列表推导式删除列表中整数个位数小于5的元素
例如:[24, 'abc', 99, True, 21, 38, 'hello'] --- ['abc', 99, True, 38, 'hello']
ls = [24, 'abc', 99, True, 21, 38, 'hello']
list1 = [x for x in ls if type(x) != int or x % 10 >= 5]
print(list1)
e. 利用列表推导式获取元素是元组的列表中每个元组的最后一个元素
例如:[(10, 20, 30), ('abc', 'hello'), (1, 2, 3.4), (True, False)] --- [30, 'hello', 3.4, False]
ls = [(10, 20, 30), ('abc', 'hello'), (1, 2, 3.4), (True, False)]
list1 = [x[-1] for x in ls]
print(list1)
3.已知代码如下,请回答出各个print的结果 并说明原因
nums = [17, 39, 28, 51]
nums2 = nums
nums2.pop()
print(len(nums)) # 这个结果是什么 请描述原因
# 结果是3,nums2与nums指向同一块内存,当操作nums2时,nums的数据也会一同更改
numlist = [17, 22, 39, 58, [55, 43]]
nums3 = numlist.copy()
print(numlist is nums3) # 结果 原因是什么
# 结果是:False。原因numlist与nums3不是指向同一块内存
numlist[-1][0] = 99
print(nums3) # num3会不会发生变化
# 会改变,因为numlist与nums3中对与[55, 43]保存的都是该列表地址,所以改变numlist中[55, 43]的值,nums3中的值也会改变
4(试一下). 定义一个列表,在列表中保存6个学生的信息(学生信息中包括: 姓名、年龄、成绩(单科)、电话、性别(男、女、不明) )
students = [
{
'name': '小明',
'age': 18,
'score': 90,
'phone': 17342347856,
'sex': '男'
},
{
'name': '小东',
'age': 21,
'score': 57,
'phone': 17342787858,
'sex': '男'
},
{
'name': '小红',
'age': 16,
'score': 47,
'phone': 17390347762,
'sex': '女'
},
{
'name': '小何',
'age': 22,
'score': 68,
'phone': 17342986475,
'sex': '女'
},
{
'name': '小玖',
'age': 17,
'score': 92,
'phone': 17342876498,
'sex': '不明'
},
{
'name': '小晴',
'age': 26,
'score': 93,
'phone': 15242398743,
'sex': '女'
}
]
a.统计不及格学生的个数
failed_stus = [x for x in students if x['score'] < 60]
print('不及格学生人数:', len(failed_stus))
b.打印不及格学生的名字和对应的成绩
for student in failed_stus:
print('name:', student['name'], 'score:', student['score'])
c.统计未成年学生的个数
minors = [x for x in students if x['age'] < 18]
print('未成年学生个数:', len(minors))
d.打印手机尾号是8的学生的名字
stus = [x for x in students if x['phone'] % 10 == 8]
for stu in stus:
print('手机尾数是8的学生的姓名:', stu['name'])
e.打印最高分和对应的学生的名字
scores = [x['score'] for x in students]
max_score = max(scores)
stus = [x for x in students if x['score'] == max_score]
for stu in stus:
print('最高分是:', max_score, '对应的学生姓名:', stu['name'])
f.删除性别不明的所有学生
stus = [x for x in students if x['sex'] != '不明']
print(stus)
g.将列表按学生成绩从大到小排序(挣扎一下,不行就放弃)
# 方法一:
scores.sort(reverse=True)
stus = []
for score in set(scores):
stus.extend([x for x in students if x['score'] == score])
print(stus)
# 方法二:
def takeSecond(elem):
return elem['score']
students.sort(key=takeSecond, reverse=True)
print(students)