day07 - 列表(2)
一、增加元素操作
1、append函数
- 语法:列表.append(元素)
- 在指定列表最后添加一个元素(不会产生新的列表,而是直接在原列表中添加)
heroes = ['寒冰射手', '小炮', '维鲁斯', '金克斯', '小法', '卡牌', '蛇女']
print(heroes)
heroes.append('剑圣')
print(heroes) # ['寒冰射手', '小炮', '维鲁斯', '金克斯', '小法', '卡牌', '蛇女']
- 案例:提取scores中不及格队分数(可以看做删除及格的分数)
scores_1 = []
for index in scores:
if index < 60:
scores_1.append(index)
print('提取scores中不及格队分数', scores_1)
- 练习1:利用append删除列表中所有奇数
nums = [89, 45, 99, 65, 93, 81, 29, 88, 76, 59, 66]
nums_1 = []
for index in nums:
if index % 2 == 0:
nums_1.append(index)
print('利用append删除列表中所有奇数', nums_1)
- 练习2:将scores中所有不及格的分数改成’补考’
scores = [89, 45, 99, 65, 93, 81, 29, 88, 76, 59, 66]
scores_1 = []
for index in scores:
if index < 60:
scores_1.append('补考')
else:
scores_1.append(index)
print('不及格的分数改成补考:', scores_1)
# [89, '补考', 99, 65, 93, 81, '补考', 88, 76, '补考', 66]
2、insert函数
- 语法:列表.insert(下标,元素)
- 将指定元素插入列表指定下标对应元素前
heroes = ['寒冰射手', '小炮', '维鲁斯', '金克斯', '小法', '卡牌', '蛇女']
print(heroes)
heroes.insert(-1, '亚索')
print(heroes) # ['寒冰射手', '小炮', '维鲁斯', '金克斯', '小法', '卡牌', '亚索', '蛇女']
heroes.insert(0, '石头人')
print(heroes) # ['石头人', '寒冰射手', '小炮', '维鲁斯', '金克斯', '小法', '卡牌', '亚索', '蛇女']
二、删除元素操作
1、使用del
- 语法:del 列表[下标]
- 删除列表中指定下标对应的元素,数据在内存清除
del heroes[1]
print(heroes) # ['寒冰射手', '维鲁斯', '金克斯', '小法', '卡牌', '蛇女']
del heroes[1]
print(heroes) # ['寒冰射手', '金克斯', '小法', '卡牌', '蛇女']
2、remove函数
- 语法:列表.remove(元素)
- 删除列表中的指定元素,数据在内存清除
heroes = ['寒冰射手', '小炮', '维鲁斯', '金克斯', '小法', '卡牌', '蛇女', '维鲁斯']
heroes.remove('小炮')
print(heroes)
- 元素有多个,只删最前面哪一个
heroes = ['寒冰射手', '维鲁斯', '金克斯', '小法', '卡牌', '蛇女', '维鲁斯']
heroes.remove('维鲁斯')
print(heroes) # ['寒冰射手', '金克斯', '小法', '卡牌', '蛇女', '维鲁斯']
- 元素不存在,报错
# heroes.remove('塔姆') # 元素不存在,报错ValueError: list.remove(x): x not in list
3、pop函数
- 语法:数据还在内存中
- 列表.pop() - 取出列表中最后一个元素并且返回取出的结果
- 列表.pop(下标) - 取出列表中指定小标的元素,并且返回取出的结果
heroes = ['寒冰射手', '小炮', '维鲁斯', '金克斯', '小法', '卡牌', '蛇女']
print(heroes) # ['寒冰射手', '小炮', '维鲁斯', '金克斯', '小法', '卡牌', '蛇女', '维鲁斯']
result_1 = heroes.pop()
print(heroes) # ['寒冰射手', '小炮', '维鲁斯', '金克斯', '小法', '卡牌', '蛇女']
print(result_1) # 蛇女
result1 = heroes.pop(0)
print(heroes) # ['小炮', '维鲁斯', '金克斯', '小法', '卡牌', '蛇女']
print(result1) # 寒冰射手
三、修改元素操作
- 语法:列表[下标]=新元素
- 将列表中对应下标改成新的元素
# 列表[下标]=新元素 - 将列表中对应下标改成新的元素
heroes = ['寒冰射手', '小炮', '维鲁斯', '金克斯', '小法', '卡牌', '蛇女']
heroes[1] = '孙悟空'
print(heroes) # ['寒冰射手', '孙悟空', '维鲁斯', '金克斯', '小法', '卡牌', '蛇女']
- 练习:将scores中所有低于60分的成绩修改成0分(使用改)
方法1:for遍历
for index in range(len(scores)):
if scores[index] < 60:
scores[index] = 0
print('不及格的分数改成0分:', scores)
方法2:enumerate
for index, item in enumerate(scores):
if item < 60:
scores[index] = 0
print('不及格的分数改成0分:', scores)
四、列表相关操作
1、列表加法运算
- 语法:列表1+列表2
- 将两个列表合成一个新的列表
A = [10, 2, 6, 4]
B = [2, 10, 50]
C = A + B
print(C) # [10, 2, 6, 4, 2, 10, 50]
print(A + A) # [10, 2, 6, 4, 10, 2, 6, 4]
2、列表乘法运算
- 语法:列表N、N列表
- 将列表中的元素重复N次产生新的列表,N必须是整数
C = A * 2
print(C) # [10, 2, 6, 4, 10, 2, 6, 4]
print(B * 3) # 注意顺序 [2, 10, 50, 2, 10, 50, 2, 10, 50]
3、列表比较运算
- 比较是否相等 ==、!=
print([2, 10, 50] == [2, 10, 50]) # True
print([10, 2, 50] == [2, 10, 50]) # False 顺序影响结果
- 比较大小 <、>、<=、>=
- 列表1>列表2:只能列表之间比较
- 比较的是第一对不相等的元素的大小(相同位置上的元素是一对)
print([10, 2, 50] > [2, 10, 50]) # True
print([10, 20, 50] > [10, 10, 50]) # True
4、列表的 in 和not in
- 元素 in 列表
- 判断指定数据是否存在列表中
print(10 in [10, 20, 50])
- 元素 not in 列表
- 判断指定数据是否不存在列表中
print(10 not in [10, 20, 50])
print([10] in [10, 20, 50])
print(10 in [[10], 20, 50])
- 练习:已经列表A和B, 打印A和B的公共元素
A = ['后羿', '甄姬', '鲁班7号', '赵云']
B = ['小乔', '孙悟空', '猪八戒', '后羿', '盾山', '赵云']
C=[]
for i in A:
if i in B:
C.append(i)
print(C)
五、列表相关函数
1、sum(数字序列)
- 求数字序列中所有元素的数值和
scores = [34, 90, 78, 65, 99]
result_1 = sum(scores)
print(result_1)
result_1 = sum(range(1,101,2))
print(result_1)
2、max、min (序列中元素支持比较运算)
- max(序列) - 求序列中的最大元素
result_1=max(scores)
print(result_1)
- min(序列) - 求序列中的最小元素
result_1=min(scores)
print(result_1)
- 补充:求最大值最小值逻辑
max=scores[0]
for i in scores[1:]:
if max < i:
max=i # 更新最大值
print(max) # 99
min=scores[0]
for i in scores[1:]:
if min > i:
min=i
print(min) # 34
3、sorted( 排序函数)
- sorted(序列)
- 将序列中的元素按照从小到大的方式排序,创建一个新的列表,并且返回
scores = [34, 90, 78, 65, 99]
result=sorted(scores)
print(result) # [34, 65, 78, 90, 99]
- sorted(序列,reverse=True)
- 将序列中的元素按照从大到小的方式排序,创建一个新的列表,并返回
scores = [34, 90, 78, 65, 99]
result=sorted(scores,reverse=True) #True - 从大到小
print(result)
4、len
- len(序列)
- (除了迭代器、生成器)统计序列中元素个数
- 序列长度 :序列中元素个数
print(len(scores))
print(len('abc123456'))
print(len(range(0,101,2)))
5、list(类型名)
- 将指定的序列转换成列表,数据必须是序列(如何序列都可以转换成列表)
- 直接将序列中的元素转换成列表中的元素
result=list('abc12345')
print(result) # ['a', 'b', 'c', '1', '2', '3', '4', '5']
result=list(range(10))
print(result) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
六、列表相关方法
1、列表.clear() - 清空列表
nums=[55,66,89,45,12,36,54,75]
nums.clear()
print(nums) # []
2、列表.count(元素) - 统计列表中指定元素的个数
nums=[55,66,89,45,12,36,54,75,55]
print(nums.count(55)) # 2
print(nums.count(100)) # 0
3、列表.extend(序列) - 将序列中的元素全部添加到列表中
list_1=[10,20]
list_1.extend([20,30,55])
print(list_1) # [10, 20, 20, 30, 55]
list_1.extend('abc')
print(list_1) # [10, 20, 20, 30, 55, 'a', 'b', 'c']
list_1.extend(range(0,9,2))
print(list_1) # [10, 20, 20, 30, 55, 'a', 'b', 'c', 0, 2, 4, 6, 8]
4、列表.index(元素) - 列表中获取指定元素对应的下标(返回的是从0开始的下标值)
- 元素不存在 - 报错
- 多个相同元素 - 取第一个元素下标
nums=[55,66,89,45,12,36,54,75,55]
print(nums.index(89)) # 2
# print(nums.index(100)) # 报错 ValueError: 100 is not in list
5、列表.reverse() - 将列表倒序
nums=[55,66,89,45,12,36,54,75,55]
nums.reverse()
print('将列表倒序',nums) # [55, 75, 54, 36, 12, 45, 89, 66, 55]
6、列表.sort() - 将列表中元素从小到大排序(直接修改源列表元素顺序)
nums=[55,66,89,45,12,36,54,75,33]
result=nums.sort()
print(nums) # [12, 33, 36, 45, 54, 55, 66, 75, 89]
print(result) #None
7、列表.sort(reverse=True) - 将列表中元素从大到小排序
nums=[55,66,89,45,12,36,54,75,33]
nums.sort(reverse=True)
print(nums) # [89, 75, 66, 55, 54, 45, 36, 33, 12]
七、列表复制
1、直接赋值
- 一个变量直接给另一个变量复制,赋值后两个变量指向同一内存
nums=[55,66,89,45,12,36,54,75,33]
nums_1=nums
print('nums:',nums)
print('nums_1:',nums_1)
2、拷贝
- 通过拷贝方式给另外一个变量赋值,拷贝是先复制原来变量中的数据,创建一个新的数据,如何将新的数据对应的内存地址新的变量
nums_2=nums*1
print('nums_2:',nums_2)
nums_3=nums+[]
print('nums_3:',nums_3)
nums_4=nums[:]
print('nums_4:',nums_4)
nums_5=nums.copy()
print('nums_5:',nums_5)
3、补充:
- python变量保存数据,存储的是数据在内存空间中的地址(python中的变量都是指针变量)
八、列表推导式
1、列表推导式作用:
- 快速创建列表(代码简洁)
- 对列表元素进行筛选
2、列表推导式结构1:
-
语法:
[表达式 for 变量 in 序列]
-
原理:
变量在序列中一个一个取值,每取一次就进行一次表达式计算,并将计算结果作为列表的元素
result = [10 for i in range(5)]
print(result) # [10, 10, 10, 10, 10]
result = [i * 2 for i in range(5)]
print(result) # [0, 2, 4, 6, 8]
- 案例1:将num中所有元素*2
num2 = [10, 23, 89, 67]
result = [i * 2 for i in num2]
print(result) # [20, 46, 178, 134]
- 案例2: 取num中所有元素的个位数的值
num2 = [10, 23, 89, 67]
result = [i % 10 for i in num2]
print(result) # [0, 3, 9, 7]
3、列表推导式结构2:
-
语法:
[表达式 for 变量 in 序列 if 条件语句 ]
-
原理:
变量在序列中一个一个取值,每取一次就进行一次if语句的条件语句:
条件满足,执行表达式并将计算结果作为列表的元素;
如果条件不成立就不进行表达式计算。
result = [i * 2 for i in range(5) if i % 2 == 0]
print(result) # [0, 4, 8]
- 案例:num中所有奇数的个位数的值
num2 = [10, 23, 89, 67]
result = [i % 10 for i in num2 if i % 2 != 0]
print(result) #[3, 9, 7]