> 文章列表 > day7-Python-列表2

day7-Python-列表2

day7-Python-列表2

Python-列表2

一.列表的增删改

1.增 - 添加元素

1.1.列表.append(元素) - 在指定列表的最后添加指定的元素(不会产生新的列表,而是直接在原列表中添加)
heroes = ['寒冰射手', '小炮', '维鲁斯', '金克斯', '小法', '卡牌', '蛇女']
print(heroes)heroes.append('剑圣')
print(heroes)heroes.append('琴女')
print(heroes)
scores = [89, 35, 78, 56, 45, 74, 86, 94, 68]
# 案例:提取scores中所有不及格的分数
new_scores = []
for s in scores:if s < 60:new_scores.append(s)
print(new_scores)  # [35, 56, 45]
# 练习1:利用append删除列表中所有的奇数
nums = [89, 45, 99, 65, 93, 81, 29, 88, 76, 59, 66]
# [88, 76, 66]
new_nums = []
for x in nums:if x % 2 == 0:new_nums.append(x)
print(new_nums)
# 练习2:将scores中所有不及格的分数改成'补考'
scores = [89, 45, 99, 65, 93, 81, 29, 88, 76, 59, 66]
# [89, '补考', 99, 65, 93, 81, '补考', 88, 76, '补考', 66]
new_score = []
for x in scores:if x < 60:new_score.append('补考')else:new_score.append(x)
print(new_score)
1.2.列表.insert(下标, 元素) - 将指定元素插入到指定列表中指定下标对应的元素前
heroes = ['寒冰射手', '小炮', '维鲁斯', '金克斯', '小法', '卡牌', '蛇女']
print(heroes)heroes.insert(-1, '索亚')
print(heroes)heroes.insert(0, '石头人')
print(heroes)

2…删 - 删除元素

2.1.del 列表[下标] - 删除列表中指定下标对应的元素
heroes = ['寒冰射手', '小炮', '维鲁斯', '金克斯', '小法', '卡牌', '蛇女']
print(heroes)del heroes[1]
print(heroes)del heroes[1]
print(heroes)
2.2列表.remove(元素) - 删除列表中的指定元素(如果元素不存在会报错,如果元素有多个,只删最前面那一个)
heroes = ['寒冰射手', '小炮', '维鲁斯', '金克斯', '小法', '维鲁斯', '卡牌', '蛇女']
print(heroes)heroes.remove('小炮')
print(heroes)# heroes.remove('塔姆')  # ValueError: list.remove(x): x not in listheroes.remove('维鲁斯')
print(heroes)
2.3. 列表.pop() - 取出列表中最后一个元素,并且返回
列表.pop(下标) - 取出列表中指定下标对应的元素,并且返回
heroes = ['寒冰射手', '小炮', '维鲁斯', '金克斯', '小法', '维鲁斯', '卡牌', '蛇女']
print(heroes)result1 = heroes.pop()
print(heroes, result1)heroes.pop(0)
print(heroes)

3.改 - 修改元素的值

列表[下标] = 新元素 - 将列表中指定下标对应的元素改成新元素
heroes = ['寒冰射手', '小炮', '维鲁斯', '金克斯', '小法', '维鲁斯', '卡牌', '蛇女']
print(heroes)heroes[1] = '孙悟空'
print(heroes)
# 练习:将scores中所有低于60分的成绩修改成0分(使用改)
scores = [89, 45, 99, 65, 93, 81, 29, 88, 76, 59, 66]
# 方法1:
for x in range(len(scores)):if scores[x] < 60:scores[x] = 0
print(scores)
# 方法2:
scores = [89, 45, 99, 65, 93, 81, 29, 88, 76, 59, 66]
for index, item in enumerate(scores):if item < 60:scores[index] = 0
print(scores)

二.列表的相关操作

1.列表加法运算

列表1 + 列表2 - 将两个列表合并成一个新的列表
A = [10, 20, 30]
B = [100, 200]
C = A + B
print(C)  # [10, 20, 30, 100, 200]print(A + A)  # [10, 20, 30, 10, 20, 30]

2.列表乘法运算

列表 * N 、 N *列表 - 将列表中的元素重复N次产生一个新的列表
C = A * 2
print(C)  # [10, 20, 30, 10, 20, 30]print(B * 3)  # [100, 200, 100, 200, 100, 200]print(['小明', '小花'] * 3)   # ['小明', '小花', '小明', '小花', '小明', '小花']

3.列表比较运算

3.1比较是否相等:==、!=
print([10, 20, 30] == [10, 20, 30])  # True
print([10, 20, 30] == [10, 40, 30])  # False
3.2比较大小:>、<、>=、<=
列表1 > 列表2
两个列表比较大小,比较的是第一对不相等的元素的大小(相同位置上的元素是一对)
print([10, 20, 30] > [1, 100, 200, 300])  # True
print([10, 20, 30] > [10, 2, 100, 512])  # True

4.in 和 not in

元素 in 列表 - 判断元素中是否存在指定元素
元素 not in 列表 - 判断列表中是否不存在指定元素
print(10 in [10, 20, 2])  # True
print(10 in [[10, 20], 30])  # False
# 练习:已经列表A和B, 打印A和B的公共元素
A = ['后羿', '甄姬', '鲁班7号', '赵云']
B = ['小乔', '孙悟空', '猪八戒', '后羿', '盾山', '赵云']
C = []
for x in A:for y in B:if x == y:C.append(x)
print(C)for x in A:if x in B:print(x)

三.列表相关函数

1.sum(数字序列) - 求数字序列中所有元素的数值和

scores = [69, 2, 45, 68, 78, 94, 85, 45]
result = sum(scores)
print(result)  # 486result = sum(range(101))
print(result)  # 5050

2.max、min

max(序列) - 求序列中的最大元素
min(序列) - 求序列中的最小元素
scores = [69, 2, 45, 68, 78, 94, 85, 45]
result = max(scores)
print(result)  # 94result = min(scores)
print(result)  # 2
# 补充:求最大值的逻辑
# 假设第一个元素是最大值保存到变量中,然后依次取出后面的每个元素和保存最大值的变量进行比较,如果后面取出的值更大则更新变量
scores = [69, 2, 45, 68, 78, 94, 85, 45]
max1 = scores[0]  # 69
for x in scores[1::]:if x > max1:max1 = x  # 更新最大值
print(max1)  # 94

3.sorted

3.1sorted(序列) - 将序列中的元素按照从小到大的方式排序,创建一个新的列表并返回
scores = [69, 2, 45, 68, 78, 94, 85, 45]
result = sorted(scores)
print(result)  # [2, 45, 45, 68, 69, 78, 85, 94]
3.2sorted(序列, reverse=True) - 将序列中的元素按照从大到小的方式排序,创建一个新的列表并返回
scores = [69, 2, 45, 68, 78, 94, 85, 45]
result = sorted(scores, reverse=True)
print(result)  # [94, 85, 78, 69, 68, 45, 45, 2]

4.len

print(len(scores))  # 8
print(len('sdfghjkl'))  # 8
print(len(range(1, 100, 2)))  # 50

5.list

list(序列) - 将指定的序列转换成列表(任何序列都可以转换成列表,直接将序列的元素作为列表的元素)
result = list('abc123')
print(result)  # ['a', 'b', 'c', '1', '2', '3']result = list(range(5))
print(result)  # [0, 1, 2, 3, 4]

四.列表相关方法

列表.xxx()

1.列表.clear() - 清空列表

# 方法1:
nums = [10, 9, 89, 23]
print(nums)nums.clear()
print(nums)
# 方法2:(不要掌握)
nums = [10, 9, 89, 23]
print(nums)
nums = []
print(nums)

2.列表.count(元素) - 统计列表中指定元素的个数

nums = [10, 9, 89, 23, 10]
print(nums.count(100))  # 0
print(nums.count(10))  # 2

3.列表.extend(序列) - 将序列中的元素全部添加到列表中

extend()和append()区别
list1 = [10, 20]
list1.extend([100, 200])
print(list1)  # [10, 20, 100, 200]list2 = [10, 20]
list2.append([100, 200])
print(list2)  # [10, 20, [100, 200]]

4.列表.index(元素) - 获取列表中指定元素对应的下标(返回的是从0开始的下标值,元素有多个时返回第一个出现的元素的下标值)

nums = [10, 9, 89, 23, 10]
# print(nums.index(100))  # ValueError: 100 is not in list
print(nums.index(89))  # 2
print(nums.index(10))  # 0

5.列表.reverse() - 将列表倒序

nums = [10, 9, 89, 23, 11]
nums.reverse()
print(nums)  # [11, 23, 89, 9, 10]

6.列表.sort()

列表.sort() - 将列表中的元素从小到大排序(直接修改原列表元素的顺序)
列表.sort(reverse=True) - 将列表中的元素从大到小排序
nums = [10, 9, 89, 23, 11]
result = nums.sort()
print(nums)  # [9, 10, 11, 23, 89]
print(result)  # Nonenums = [10, 9, 89, 23, 11]
nums.sort(reverse=True)
print(nums)  # [89, 23, 11, 10, 9]
sorted(序列) - 将列表中的元素从小到大排序(不修改原序列中元素的顺序,而是创建一个新列表)
nums = [10, 9, 89, 23, 11]
result = sorted(nums)
print(nums)  # [10, 9, 89, 23, 11]
print(result)  [9, 10, 11, 23, 89]

五.列表赋值问题

补充:python中的变量保存数据,保存的是数据在内存中的地址(python中的变量全部都是指针变量)

1.拷贝和直接赋值

# 需求:已知一个列表,一模一样的新的列表
nums = [10, 20, 25, 41]
1.1直接赋值
一个变量直接给另一个变量赋值,赋的是地址,赋值后两个变量指向的是同一块内存
nums2 = nums
print('nums:', nums)
print('nums2:', nums2)
1.2拷贝
一个变量通过拷贝的方式给另外一个变量赋值,赋值的时候会先复制原来变量中的数据,创建一个新的数据,然后将新的数据对应的内存地址给新的变量
nums3 = nums*1
print('nums3:', nums3)nums4 = nums + []
print('nums4:', nums4)nums5 = nums[:]
print('nums5:', nums5)nums6 = nums.copy()
print('nums6:', nums6)print('-------------------')
nums.append(100)print('nums:', nums)  # [10, 20, 25, 41, 100]
print('nums2:', nums2)  # [10, 20, 25, 41, 100]
print('nums3:', nums3)  # [10, 20, 25, 41]
print('nums4:', nums4)
print('nums5:', nums5)
print('nums6:', nums6)

六.列表推导式

列表推导式的作用:快速创建列表的表达式(代码简洁)

1.列表推导式结构1

"""
1)语法:
[表达式 for 变量 in 序列]2)让变量去序列中取值,一个一个取,取完为止,每取一个值就计算一次表达式的结果,并且将计算结果作为列表的一个元素"""
result = [10 for x in range(5)]
print(result)  # [10, 10, 10, 10, 10]result = [x*2 for x in range(5)]
print(result)  # [0, 2, 4, 6, 8]
# 案例1:将nums中所有元素乘以2
nums = [10, 23, 89, 67]
result = [x*2 for x in nums]
print(result)  # [20, 46, 178, 134]
# 案例2:获取nums中所有元素的个位数
nums = [103, 23, 89, 67]
result = [x % 10 for x in nums]
print(result)  # [3, 3, 9, 7]

2.列表推导式结构2

"""
1)语法:
[表达式 for 变量 in 序列 if 条件语句]2)让变量去序列中取值,一个一个的取,取完为止,每取一个值就判断一次条件是否成立,如果成立就计算表达式的值作为列表的元素"""
result = [x * 2 for x in range(5) if x % 2 == 0]
print(result)  # [0, 4, 8]
# 案例1:删除scores中所有不及格的分数
scores = [80, 99, 23, 67, 56, 82, 76, 45]
result = [x for x in scores if x >= 60]
print(result)  # [80, 99, 67, 82, 76]
# 案例2:提取num中所有奇数的个位数
nums = [103, 230, 39, 67, 78]
result = [x % 10 for x in nums if x % 2 != 0]
print(result)  # [3, 9, 7]