列表的增删改
1.增 - 添加元素
1)列表.append(元素) - 在列表的最后添加指定元素。
tvs = ['回家的诱惑', '非自然死亡', '亮剑', '请回答1988', '觉醒年代']
tvs.append('生活大爆炸')
print(tvs) # 结果:['回家的诱惑', '非自然死亡', '亮剑', '请回答1988', '觉醒年代', '生活大爆炸']
练习:用一个列表保存100以内所有能被3整除数
list_1 = []
for i in range(0, 100, 3):
list_1.append(i)
print(list_1)
2)列表.insert(下标,元素) - 在列表的指定下标所在的位置前插入指定元素。
tvs = ['回家的诱惑', '非自然死亡', '亮剑', '请回答1988', '觉醒年代']
tvs.insert(1, '人民的名义')
print(tvs) # 结果:['回家的诱惑', '人民的名义', '非自然死亡', '亮剑', '请回答1988', '觉醒年代']
练习:已经一个列表scores按分数从高到低保存了一个班学生的分数,请输入一个新的分数,
将新的分数插入到scores中,并且保证插入后不影响,scores是从大到小排序的。
scores = [98, 93, 91, 87, 83, 80, 77, 70, 65, 62, 56]
num = int(input('请输入需要插入的分数:'))
for i in range(len(scores)):
if scores[i] < num:
scores.insert(i, num)
break
else:
scores.append(num) # 遍历列表所有分数都大于num,则在末尾添加num。
print(scores)
2. 删 - 删除列表中的元素。
1)del 列表[下标] - 删除列表中指定下标对应的元素;下标不能越界。
tvs = ['回家的诱惑', '非自然死亡', '亮剑', '请回答1988', '觉醒年代']
del tvs[1]
print(tvs) # ['回家的诱惑', '亮剑', '请回答1988', '觉醒年代']
2) 列表.remove(元素) - 删除列表中指定元素
如果需要删除的元素在列表中有多个,只删最前面的一个。
如果需要删除的元素不存在,程序会报错。
tvs = ['回家的诱惑', '非自然死亡', '亮剑', '请回答1988', '觉醒年代']
tvs.remove('回家的诱惑')
print(tvs) # ['非自然死亡', '亮剑', '请回答1988', '觉醒年代']
scores = [98, 93, 91, 83, 80, 77, 70, 83, 65, 62, 56]
scores.remove(83)
print(scores) # [98, 93, 91, 80, 77, 70, 83, 65, 62, 56]
# 倒序遍历则删除倒序遍历的第一个元素。
tvs = ['回家的诱惑', '琅琊榜', '非自然死亡', '亮剑', '琅琊榜', '请回答1988', '觉醒年代', '琅琊榜']
for i in range(-1, -len(tvs)-1, -1):
if tvs[i] == '琅琊榜':
del tvs[i]
break
print(tvs) # ['回家的诱惑', '琅琊榜', '非自然死亡', '亮剑', '琅琊榜', '请回答1988', '觉醒年代']
3)列表.pop() - 取出列表最后一个元素。
列表.pop(下标) - 取出列表中指定1下标对应的元素。
tvs = ['回家的诱惑', '非自然死亡', '亮剑', '请回答1988', '觉醒年代']
res_1 = tvs.pop() # ['回家的诱惑', '非自然死亡', '亮剑', '请回答1988']
print(tvs)
res_2 = tvs.pop(1)
print(tvs) # ['回家的诱惑', '亮剑', '请回答1988']
print(res_1) # 觉醒年代
print(res_2) # 非自然死亡
3.改:列表[下标] = 新值 - 修改列表中指定下标对应的元素。
tvs = ['回家的诱惑', '非自然死亡', '亮剑', '请回答1988', '觉醒年代']
tvs[0] = 'POI疑犯追踪'
print(tvs) # ['POI疑犯追踪', '非自然死亡', '亮剑', '请回答1988', '觉醒年代']
补充4. 如果直接用一个列表变量给另一个变量赋值,赋的是原来变量中列表的地址。
练习:删除scores中所有小于60分的成绩
scores_1 = []
scores = [87, 34, 50, 23, 78, 99, 45, 23, 76, 89, 30]
for i in range(len(scores)):
if scores[i] > 60:
scores_1.append(scores[i])
scores = scores_1
print(scores)
方法1:
scores = [87, 34, 50, 23, 78, 99, 45, 23, 76, 89, 30]
temp = scores[:] # 列表1 = 列表2[:] - 创建一个新的列表1,新列表1中的元素和列表2一样。
for i in temp: # 遍历新列表的元素
if i < 60:
scores.remove(i) # 删除旧列表中的元素
print(scores)
方法2:
scores_1 = []
scores_2 = []
scores = [87, 34, 50, 60, 23, 78, 99, 45, 23, 76, 89, 30]
for i in range(len(scores)):
if scores[i] < 60:
scores_1.append(scores[i])
for i in range(len(scores)):
if scores[i] >= 60:
scores_2.append(scores[i])
print('不及格的:', scores_1)
print('及格的:', scores_2)
方法3:
scores = [87, 34, 50, 23, 78, 99, 45, 23, 76, 89, 30]
index = 0
while True:
if scores[index] >= 60:
index += 1
else:
del scores[index]
if index >= len(scores):
break
print(scores)
1.加法和乘法运算。
列表1 + 列表2 - 将两个列表合并产生一个新的列表。
应用1:
list1 = [1, 2, 3] + ['a', 'b', 'c']
print(list1) # [1, 2, 3, 'a', 'b', 'c']
列表 * N - 列表中的元素重复N次产生一个新的列表。
list2 = [1, 2, 'a'] * 3
print(list2) # [1, 2, 'a', 1, 2, 'a', 1, 2, 'a']
2.in 和 not in
元素 in 列表 - 判断列表中是否存在指定元素
元素 not in 列表 - 判断列表中是否不存在指定元素
应用1:
print(10 in [10, 20, 30]) # True
print([10, 20] in [10, 20, 30]) # False
print([10, 20] in [10, 20, 30, [10, 20]]) # True
num = 10
if num == 10 or num == 20 or num == 30:
print('是')
#优化写法
if num in[10, 20, 30]:
print('是')
作业
1.已知一个数字列表,求列表中心元素。
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
mid = len(nums)//2
if mid != len(nums) / 2:
print(nums[mid])
else:
print(nums[mid-1],nums[mid])
2.已知一个数字列表,求所有元素和。
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9]
count = 0
for i in nums:
count += i
print(count)
3.已知一个数字列表,输出所有奇数下标元素。
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(nums[1:len(nums):2])
4.已知一个数字列表,输出所有元素中,值为奇数的元素。
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9]
odd = []
for i in nums:
if i % 2 != 0 and i != 0:
odd.append(i)
print(odd)
5.已知一个数字列表,将所有元素乘二。
例如:nums = [1, 2, 3, 4] —> nums = [2, 4, 6, 8]
nums = [1, 2, 3, 4]
num = []
for i in nums:
x = i * 2
num.append(x)
nums = num
#方法2
for index in range(len(nums)):
nums[index] *= 2
print(nums)
6.有一个长度是10的列表,数组内有10个人名,要求去掉重复的
例如:names = [‘张三’, ‘李四’, ‘大黄’, ‘大黄’, ‘张三’, ‘张三’, ‘张三’] -> names = [‘张三’, ‘李四’, ‘大黄’]
names = ['张三', '李四', '大黄', '大黄', '张三', '张三', '张三']
name = []
for i in names:
if i not in name:
name.append(i)
else:
names = name
print(names)
7.用一个列表来保存一个节目的所有分数,求平均分数(去掉一个最高分,去掉一个最低分,求最后得分)
score = [66,91,90,85,86,70,99,84,95]
num_sum = 0
num_h = 0
num_s = score[0]
for i in score:
if i > num_h:
num_h = i
elif num_s > i:
num_s = i
else:
score.remove(num_h)
score.remove(num_s)
for x in score:
num_sum += x
print(num_sum / len(score))
# 方法2
score = [66, 91, 90, 85, 86, 70, 99, 84, 95]
max1 = min1 = score[0]
sum1 = 0
count = 0
for i in score:
if i > max1:
max1 = i
if i < min1:
min1 = i
sum1 += i
count += 1
print((sum1-max1-min1)/ (count-2))
8.有两个列表A和B,使用列表C来获取两个列表中公共的元素
例如: A = [1, ‘a’, 4, 90] B = [‘a’, 8, ‘j’, 1] --> C = [1, ‘a’]
A = [1, 'a', 4, 90]
B = ['a', 8, 'j', 1]
C = []
for i in A:
for x in B:
if i == x:
C.append(i)
print(C)
9.*有一个数字列表,获取这个列表中的最大值.(注意: 不能使用max函数)
例如: nums = [19, 89, 90, 600, 1] —> 600
nums = [19, 89, 90, 600, 1]
a = nums[0]
for i in nums[1:]:
if i > a:
a = i
print(a)
10.*获取列表中出现次数最多的元素
例如:nums = [1, 2, 3,1,4,2,1,3,7,3,3] —> 打印:3
nums = [1, 2, 3, 1, 4, 2, 1, 3, 7, 3, 3, 1]
_nums = []
_nums1 = []
while True:
_nums1 = []
for x in nums:
if x not in _nums:
_nums.append(x)
else:
_nums1.append(x)
if len(_nums1):
_nums = []
nums = _nums1
else:
print(_nums)
break