一、遍历列表
1、列表遍历
遍历列表指将列表中的数字一个一个的取出来
- 遍历列表三种方式:
-
获取列表元素
for 变量 in 列表: 循环体(循环体中变量获取到的是列表的元素)
-
通过变量列表中每个元素的下标,来遍历列表中的元素
for 变量 in range(列表长度): 循环体(变量获取到的是列表中每个元素的下标,从0开始)
-
同时获取每个元素的下标和元素
for 变量1,变量2 in enumerate(列表): 循环体(循环体中变量1依次获取列表中每个元素的下标,变量2依次获取列表中每个元素)
-
三种遍历方式演示:
都以
tvs = ['甄嬛传', '琅琊榜', '仙剑奇侠传', '金粉世家', '亮剑', '爱情公寓', '庆余年']
列表为例
1.获取列表元素
for i in tvs:
print(i)
通过变量列表中每个元素的下标,来遍历列表中的元素
# print(len(tvs)) # 列表长度
for i in range(len(tvs)):
print(i, tvs[i])
for i in range(-1, -len(tvs) - 1, -1):
print(i, tvs[i])
同时获取每个元素的下标和元素
for index,item in enumerate(tvs):
print(index,item)
练习: 1)求平均分 2)统计不及格学生的人数
scores = [89, 78, 61, 92, 20, 63, 51]
sum1 = 0
count = 0
for i in scores:
sum1 += i
if i < 60:
count += 1
print('平均分:',sum1 / len(scores),'不及格人数:',count)
二、列表的增删改操作
1.增 - 往列表中添加元素
方法 | 用法 |
---|---|
列表.append(元素) | 在指定列表的最后添加指定元素 |
列表.insert(下标, 元素) | 将指定元素插入到列表中指定下标的元素前 |
1.用法1: 列表.append(元素)
示例:
names = ['肖生克的救赎', '霸王别姬', '阿甘正传']
print(names) # ['肖生克的救赎', '霸王别姬', '阿甘正传']
names.append('恐怖游轮')
print(names) # ['肖生克的救赎', '霸王别姬', '阿甘正传', '恐怖游轮']
names.append('沉默的羔羊')
print(names) # ['肖生克的救赎', '霸王别姬', '阿甘正传', '恐怖游轮', '沉默的羔羊']
2.用法2: 列表.insert(下标, 元素)
示例:
names = ['肖生克的救赎', '霸王别姬', '阿甘正传', '恐怖游轮', '沉默的羔羊']
names.insert(1, '加勒比海盗')
print(names)
练习:
- 提取nums中所有偶数
nums = [89, 78, 60, 77, 43, 22, 40]
list1 = []
for i in nums:
if i % 2 == 0:
list1.append(i)
print(list1)
- 删除scores中不及格的分数
scores = [89, 78, 61, 92, 20, 63, 51]
list2 = []
for i in scores:
if i >= 60:
list2.append(i)
print(list2)
- 将scores中所有不及格的分数修改成
重修
scores = [89, 78, 61, 92, 20, 63, 51]
list3 = []
for i in scores:
if i >= 60:
list3.append(i)
else:
list3.append('重修')
print(list3)
2.删 - 删除元素
方法 | 用法 |
---|---|
del 列表[下标] | 删除指定下标元素 |
列表.remove(元素) | 删除列表中指定元素 |
列表.pop(下标) | 取出列表中指定下标对应的元素,并且返回 (删除后还可以取到) |
列表.pop(下标) - 取出列表中最后一个元素
1.del 列表[下标]
names = ['肖生克的救赎', '加勒比海盗', '霸王别姬', '阿甘正传', '恐怖游轮', '沉默的羔羊']
print(names)
del names[1]
print(names)
del names[-1]
print(names)
2.列表.remove(元素)
names = ['肖生克的救赎', '加勒比海盗', '霸王别姬', '阿甘正传', '恐怖游轮', '霸王别姬', '沉默的羔羊', '霸王别姬']
names.remove('加勒比海盗')
print(names) # ['肖生克的救赎', '霸王别姬', '阿甘正传', '恐怖游轮', '沉默的羔羊']
# names.remove('长江七号') # (报错)x not in list
names.remove('霸王别姬')
print(names) # ['肖生克的救赎', '阿甘正传', '恐怖游轮', '霸王别姬', '沉默的羔羊', '霸王别姬']
3.列表.remove(元素) 和 列表.pop(下标)
names = ['肖生克的救赎', '霸王别姬', '阿甘正传', '恐怖游轮', '霸王别姬', '沉默的羔羊', '霸王别姬']
result = names.pop(-2)
print(names,result) # ['肖生克的救赎', '霸王别姬', '阿甘正传', '恐怖游轮', '霸王别姬', '霸王别姬'] 沉默的羔羊
result = names.pop()
print(names, result) # ['肖生克的救赎', '霸王别姬', '阿甘正传', '恐怖游轮', '霸王别姬'] 霸王别姬
练习: 删除scores中所有不及格的分数
-
错误代码:
scores = [67, 40, 50, 78, 30, 60, 55, 39] for x in scores: if x < 60: scores.remove(x) print(scores) # [67, 50, 78, 60, 39]
- 错误原因:
""" scores = [67, 40, 50, 78, 30, 60, 55, 39] 第1次: x = 67: if 67 < 60 ->if False 第2次: x = 40: if 40 < 60 ->if True -> scores.remove(40) 第3次: x = 78: if 78 < 60 ->if False 第4次: x = 30: if 30 < 60 ->if True -> scores.remove(30) 第5次: x = 55: if 55 < 60 ->if True -> scores.remove(55) 第6次: 循环结束! """
-
解决方案:
-
删除之前对原数据进行备份,遍历备份数据,删除原数据
scores = [67, 40, 50, 78, 30, 60, 55, 39] # new_scores = [67, 40, 50, 78, 30, 60, 55, 39] # new_scores = scores[:] for i in scores[:]: if i < 60: scores.remove(i) print(scores)
-
倒着取
for x in range(len(scores)-1,-1,-1): if scores[x] < 60: del scores[x] print(scores)
-
控制下标
scores = [67, 40, 50, 78, 30, 60, 55, 39] index = 0 while True: if scores[index] < 60: del scores[index] else: index += 1 if index == len(scores): break print(scores)
3.改 - 修改元素的值
1. 用法: 列表[下标] = 值 - 修改指定下标对应的元素
scores = [67, 40, 50, 78, 30, 60, 55, 39]
scores[0] = 100
print(scores)
三、列表相关操作
1.列表数学运算:+、*
- 列表1 + 列表2 - 将列表1的元素和列表2的元素进行合并,产生一个新列表
list1 = [10,20,30]
list2 = [100,200]
list3 = list1 + list2
print(list3) # [10, 20, 30, 100, 200]
- 列表 * N - 重复N次列表中的元素产生一个新列表
print(list1 * 2) # [10, 20, 30, 10, 20, 30]
2.列表比较运算: >、<、>=、==、!=
-
判断是否相等
两个列表一模一样的时候才相等
print(list1 == [10,20,30]) #True print(list1 == [20,10,30]) #False
-
比较大小 - 比较第一对不相等的元素的大小(数据类型不同在比较时会报错)
列表1 > 列表2
print([10,20,300,400] > [10,22,30]) # False print([10,20,300,400] > [10,'abc',30]) # '>' not supported between instances of 'int' and 'str'
-
in 和 not in
- 数据 in列表 - 判断列表中是否存在指定数据
- 数据 not in列表 - 判断列表中是否不存在指定数据
list1 = [10,20,30]
print(10 in list1) # True
print(1 in list1) # False
print([10,20] in list1) # False
print(10 in [[10,20],30]) # False
print(10 in [[10,20],30][0]) # True
# [[10,20],30][0] -> 列表[0] -> [10,20]
list2 = [[10,20],30]
print(list2[0]) # [10,20]
练习:去掉nums中重复的元素
nums = [10, 23, 40, 10, 55, 23, 40, 10]
list1 = []
for i in nums:
if i not in list1:
list1.append(i)
print(list1) # [10, 23, 40, 55]
四、列表相关函数
函数 | 说明 |
---|---|
max(列表) | 获取列表中最大值 |
min(列表) | 获取列表中最小值 |
sorted(列表) | 将列表中的元素从小到大排序,创建一个新列表 |
sorted(列表, reverse=True) | 将列表中的元素从大到小排序,创建一个新列表 |
sum(列表) | 求列表中所有元素的和 |
len(列表) | 获取列表中元素的个数 |
list(数据) | 将指定数据转换为列表 |
1. max、min
scores = [19, 89, 93, 80, 76, 62, 56]
print(max(scores)) # 93
print(min(scores)) # 19
在不使用max的情况下,求scores中的最高分
scores = [19, 89, 93, 80, 76, 62, 56]
max_score = scores[0]
for i in scores[1:]:
if i > max_score:
max_score = i
print(max_score)
求nums中个位数最小的
nums = [90, 83, 62, 77, 59, 81]
min_nums = nums[0]
min_ = nums[0] % 10
for i in nums[1:]:
if i % 10 < min_:
min_nums = i
print(min_nums)
2. sorted
应用
nums = [90, 83, 62, 77, 59, 81]
new_nums = sorted(nums)
print(new_nums) # [59, 62, 77, 81, 83, 90]
new_nums = sorted(nums,reverse=True)
print(new_nums) # [90, 83, 81, 77, 62, 59]
# 按个位数的大小从小到大排序
new_nums = sorted(nums,key=lambda x: x % 10)
print(new_nums) # [90, 81, 62, 83, 77, 59]
3. sum
求列表中元素和
scores = [19, 89, 93, 80, 76, 62, 56]
print(sum(scores)) # 475
4.len
求scores列表元素个数
scores = [19, 89, 93, 80, 76, 62, 56]
print(len(scores)) # 7
5.list
result = list('abc')
print(result) # ['a', 'b', 'c']
result = list(range(5))
print(result) # [0, 1, 2, 3, 4]
五、列表相关方法
方法 | 作用 |
---|---|
列表.clear | 清空列表 |
列表.copy() | 复制列表产生一个一模一样的新列表,将新列表返回 |
列表.count(元素) | 统计列表中指定元素的个数 |
列表.extend(序列) | 将序列中所有的元素都添加到列表的最后 |
列表.index(元素) | 获取指定元素在列表中的下标值(从0开始的下标值) |
列表.reverse() | 将列表倒序 |
列表.sort() | 将列表中的元素从小到大排序 |
1. 列表.clear
nums = [90, 83, 62, 77, 59, 81]
nums.clear()
print(nums) # []
2. 列表.copy()
nums = [90, 83, 62, 77, 59, 81]
result = nums.copy()
print(result)
3. 列表.count(元素)
nums = [4, 56, 10, 90, 80, 90, 10, 10]
print(nums.count(10)) # 3
print(nums.count(90)) # 2
print(nums.count(100)) # 0
4. 列表.extend(序列)
nums = [90, 83, 62, 77, 59, 81]
list1 = ['abc', 100, '你好']
nums.extend(list1)
print(nums) # [90, 83, 62, 77, 59, 81, 'abc', 100, '你好']
nums.extend('abc')
print(nums) # [90, 83, 62, 77, 59, 81, 'abc', 100, '你好', 'a', 'b', 'c']
5. 列表.index(元素)
nums = [90, 83, 62, 77, 59, 81]
print(nums.index(83)) # 1
print(nums.index(81)) # 5
注意: 如果元素不存在,会报错
print(nums.index(100)) # (报错)100 is not in list
如果元素有多个,返回最前面一个的下标
nums = [90, 83, 62, 77, 83, 59, 81]
print(nums.index(83)) # 1
6. 列表.reverse()
nums = [90, 83, 62, 77, 59, 81]
nums.reverse()
print(nums) # [81, 59, 77, 62, 83, 90]
7.列表.sort()
列表.sort(reverse=True) - 将列表中元素从大到小排序
nums = [90, 83, 62, 77, 83, 59, 81]
nums.sort()
print('方法1',nums)
nums = [90, 83, 62, 77, 83, 59, 81]
result = sorted(nums)
print('方法2',nums,result)
六、列表推导
列表推导式 - 创建列表的表达式
结构1
[表达式 for 变量 in 序列]
- 创建列表原理:让变量去序列中取值,一个一个的取,取完为止,每取一个值就计算一次表达式的结果并且将计算的结果作为列表的一个元素
演示:
result = [10 for x in range(5)]
print(result) # [10, 10, 10, 10, 10]
result = [x for x in range(5)]
print(result) # [0, 1, 2, 3, 4]
练习
# 用列表推导式将nums中所有的元素都乘以2
nums = [19, 45, 6, 7]
result = [i*2 for i in nums]
print(result) # [38, 90, 12, 14]
# 获取nums中所有元素的十位数
nums = [189, 78, 102, 99]
result = [i % 100 // 10 for i in nums]
print(result) # [8, 7, 0, 9]
# 将scores中所有的元素变成'及格'或者'不及格'
scores = [89, 70, 56, 42, 99, 81, 44]
result = ['不及格' if i < 60 else '及格' for i in scores]
print(result) # ['及格', '及格', '不及格', '不及格', '及格', '及格', '不及格']
结构2
[表达式 for 变量 in 序列 if 条件语句]
- 创建列表原理: 让变量在序列中取值,一个一个的取,取完为止,每取一个值就判断一次一次条件是否成立,如果成立就计算表达式结果作为列表中的元素
示例:
result = [i*2 for i in range(10) if i % 2 == 0]
print(result) # [0, 4, 8, 12, 16]
练习:
# 删除nums中多有大于70的奇数 # [90, 62, 59]
nums = [90, 83, 62, 77, 59, 81]
result = [i for i in nums if not(i % 2 != 0 and i > 70)]
print(result)
# 获取num中的所有偶数,并且将偶数除以2 # [45, 31]
nums = [90, 83, 62, 77, 59, 81]
result = [i // 2 for i in nums if i % 2 == 0]
print(result)