这里写目录标题
总结
一、list
1、什么是列表(list)
列表是可变的(可变指的是元素的个数可变,元素的值可变,元素的顺序可变)
列表是有序的(每个元素都有一个表示元素位置的序号 - ‘下标’)
students = ['张丁也', '钟林君', '程赟', '陶皞', '刘俊']
print(students) # ['张丁也', '钟林君', '程赟', '陶皞', '刘俊']
name = [] # []空列表,如果[]中有空格也是空列表(空列表的布尔值是false)
print(name, bool(name)) # [] False
list1 = [12, 2.3, True, 'abc', 12, [1, 2]] # 一共6个元素
print(list1) # [12, 2.3, True, 'abc', 12, [1, 2]]
2、查 - 获取元素
1)查单个
获取列表中某一个元素
语法:
列表[下标] - 获取列表中指定下标对应的元素
- 说明:
- 列表 - 任何结果是列表的表达式,例如:具体的一个列表值、保存列表的变量
- [] - 固定写法
- 下标 - 又叫索引。它是元素在列表中的位置信息。
- 取值方式1:从0,开始依次增加,其中0表示第一个元素,1表示第二个元素
- 取值方式2:从-1,开始依次减少,其中-1表示倒数第一个元素,-2表示倒数第二个元素
names = ['yibo', 'top', 'GD', '小S']
print(names[2]) # GD
print(names[-1]) # 小S
# print(names[7]) # 报错 IndexError: list index out of range (下标不在范围内)
print([97, 85][0]) # 97
2)切片(查部分)
同时获取列表中的多个元素
原理:通过提供下标范围来获取范围内下标对应的元素
语法:
列表[开始的下标:结束下标:步长] - 从开始下标开始,每次下标值增加步长,取到结算下标前为止
- 注意:
- 结束下标对应的元素一定取不到,开始下标对应的元素可以取到
- 如果步长为正,表示从前往后取,这个时候开始下标对应的为止必须在结束下标对应的位置前,否则结果是[]
- 如果步长为负,表示从后往后前,这个时候开始下标对应的为止必须在结束下标对应的位置后,否则结果是[]
names = ['yibo', 'top', 'GD', '小S']
print(names[0:3:1]) # ['yibo', 'top', 'GD']
print(names[1:-1:1]) # ['top', 'GD']
print(names[0:3:-1]) # [] 无效范围,无法取到值
print(names[3:0:2]) # [] 无效范围,无法取到值
print(names[3:0:-1]) # ['小S', 'GD', 'top']
print(names[-1:2:-1]) # ['小S']
(1)省略步长 - 相当于步长是1
列表[开始下标:结束下标]
names = ['yibo', 'top', 'GD', '小S', '水晶'] print(names[1:-1]) print(names[-2:2])
(2)省略开始下标
列表[:结束下标:步长] - 步长为正,从第一个元素开始往后取;步长为负,从最后一个元素往前取
列表[:结束下标] - (步长也省略)从第一个元素开始往后取
heros = ['后羿', '李元芳', '诸葛亮', '娜可露露', '甄姬', '王昭君', '孙膑'] print(heros[:4:2]) # ['后羿', '诸葛亮'] print(heros[:2:-1]) # ['孙膑', '王昭君', '甄姬', '娜可露露'] print(heros[:-1]) # ['后羿', '李元芳', '诸葛亮', '娜可露露', '甄姬', '王昭君']
(3)省略结束下标
列表[开始下标::步长] - 步长为正,从开始下标开始往后取到最后一个元素为止;步长为负,从开始下标往前取到最前一个元素
列表[开始下标:]heros = ['后羿', '李元芳', '诸葛亮', '娜可露露', '甄姬', '王昭君', '孙膑'] print(heros[1:]) # ['李元芳', '诸葛亮', '娜可露露', '甄姬', '王昭君', '孙膑'] print(heros[2::-1]) # ['诸葛亮', '李元芳', '后羿'] print(heros[-1::-2]) # ['孙膑', '甄姬', '诸葛亮', '后羿']
(4)一起省
列表[::步长]
列表[:] - 步长默认1
heros = ['后羿', '李元芳', '诸葛亮', '娜可露露', '甄姬', '王昭君', '孙膑'] print(heros[::-1]) # ['孙膑', '王昭君', '甄姬', '娜可露露', '诸葛亮', '李元芳', '后羿'] print(heros[::2]) # ['后羿', '诸葛亮', '甄姬', '孙膑'] print(heros[:]) # ['后羿', '李元芳', '诸葛亮', '娜可露露', '甄姬', '王昭君', '孙膑']
3)遍历
方法一:直接获取元素
for 变量 in 列表:
循环体
games = ['王者荣耀', '和平精英', '狼人杀', '植物大战僵尸', '开心消消乐']
for x in games:
print(x) # 每次循环取一次
练习;统计列表分数不及格的个数
scores = [90, 89, 67, 54, 32, 99, 67, 10] count = 0 for x in scores: if x < 60: count += 1 print(x)
方法二:先获取每个元素对应的下标,然后再通过下标获取元素
for 变量 in range(列表长度):
列表[变量]
len(列表) - 获取列表中元素的个数
games = ['王者荣耀', '和平精英', '狼人杀', '植物大战僵尸', '开心消消乐', '红警']
for x in range(len(games)):
print(x, games[x])
练习:给一个数字列表,打印列表中所有3的倍数对应的元素
nums = [23, 9, 34, 5, 15, 6] for x in range nums: if nums % 3 == 0: print(x)
二、operation
1.增 - 往列表中添加元素
1)列表.append(元素)
在列表中的最后添加指定的元素
subjects = ['ios', '安卓']
print(subjects) # ['ios', '安卓']
subjects.append('h5')
print(subjects) # ['ios', '安卓', 'h5']
subjects.append([97, 85]) # ['ios', '安卓', 'h5', [97, 85]]
print(subjects)
print(subjects[-1]) # [97, 85]
print(subjects[-1][-1]) # [97, 85][-1] == 85
2)列表.insert(下标,元素)
在列表的指定下标对应的元素前插入指定的元素
# 在甄嬛传和还珠格格中插入庆余年
tvs.insert(1, '庆余年')
print(tvs) # ['甄嬛传', '庆余年', '还珠格格', '情深深雨蒙蒙', '琅琊榜']
# 在甄嬛传前插入西游记
tvs.insert(0, '西游记')
print(tvs) # ['西游记', '甄嬛传', '庆余年', '还珠格格', '情深深雨蒙蒙', '琅琊榜']
练习:将输入的成绩插入到scores中,要求插入后不影响分数从大到小排序的性质
scores = [100, 98, 97, 97, 89, 86, 72, 66, 63, 59, 42] nums = int(input'请输入分数(0~100):') for x in range(len(nums)): if nums >= nums[x] scores.insert(nums) break eles: scores.append(nums) print(scores)
2.删 - 删除列表中的元素
1)del 列表[下标]
删除列表中指定下标对应的元素
tvs = ['西游记', '甄嬛传', '庆余年', '还珠格格', '情深深雨蒙蒙', '琅琊榜']
del tvs[-2]
print(tvs) # ['西游记', '甄嬛传', '庆余年', '还珠格格', '琅琊榜']
2)列表.remove(元素)
删除列表中指定的元素
tvs = ['西游记', '甄嬛传', '庆余年', '还珠格格', '情深深雨蒙蒙', '琅琊榜']
tvs.remove('情深深雨蒙蒙')
print(tvs) # ['西游记', '甄嬛传', '庆余年', '还珠格格', '琅琊榜']
如果元素或下标不存在会报错
tvs.remove('三生三世十里桃花') # 报错ValueError: list.remove(x): x not in list
如果列表中有多个相同的元素,只删除靠前的一个
tvs = ['西游记', '甄嬛传', '庆余年', '还珠格格', '情深深雨蒙蒙', '庆余年', '琅琊榜'] tvs.remove('庆余年') print(tvs) # ['西游记', '甄嬛传', '还珠格格', '情深深雨蒙蒙', '庆余年', '琅琊榜']
3)pop
列表.pop()
取出列表最后一个元素,并且返回
tvs = ['西游记', '甄嬛传', '庆余年', '还珠格格', '情深深雨蒙蒙', '琅琊榜']
result = tvs.pop()
print(tvs) # ['西游记', '甄嬛传', '庆余年', '还珠格格', '情深深雨蒙蒙']
print(result) # 琅琊榜
列表.pop(下标)
取出列表指定下标的元素
tvs = ['西游记', '甄嬛传', '庆余年', '还珠格格', '情深深雨蒙蒙', '琅琊榜']
result = tvs.pop(1)
print(tvs) # ['西游记', '庆余年', '还珠格格', '情深深雨蒙蒙', '琅琊榜']
print(result) # 甄嬛传
3.改 - 修改某个元素的值
列表[下标] = 新元素
修改列表中指定下标对应的元素为新元素
tvs = ['琅琊榜', '庆余年', '甄嬛传']
tvs[0] = '生活大爆炸'
print(tvs) # ['生活大爆炸', '庆余年', '甄嬛传']
练习:将分数列表中所有低于60分的分数修改成’不及格’
scores = [78, 90, 20, 34, 78, 99, 34, 55] for x in range(len(scores)): if scores[x] < 60: scores[x] = '不及格' print(scores) # # [78, 90, '不及格', '不及格', 78, 99, '不及格', '不及格']
三、otherOperation
1.列表数学运算: +、*
1)列表1 + 列表2
将两个列表合并产生一个新的列表(不会修改原列表)
list1 = [10, 20, 30]
list2 = [100, 200]
print(list1 + list2) #[10, 20, 30, 100, 200]
2)列表 *N / N * 列表
将列表中元素重复N次产生一个新的列表
print(list2 * 3) # [100, 200, 100, 200, 100, 200]
2.比较运算 ==、!=、>、<、>=、<=
1)比较是否相等
print([10, 20, 30] == [10, 20, 30]) # True
print([10, 20, 30] == [30, 20, 10]) # Flase
2)比较大小
比较第一对不相等的元素的大小(两个列表相同位置上的元素是一对)
print([100, 200] > [10, 20, 30, 40, 10000]) # True
print([100, 200] > [100, 2000, 10000]) # False
3. in 和 not in
元素 in 列表 - 判断指定的列表中是否存在指定元素
元素 not in 列表 - 判断指定的列表中是否不存在指定元素
nums = [10, 20, 30] print(100 in nums) # False print(100 not in nums) # True print([10] in nums) # False
4.相关函数:max、min、sorted、sum、list、len
1)max(列表)
获取列表中最大的元素
2)min(列表)
获取列表中最小的元素
列表中元素数据类型一致,并且元素本身支持比较元素
nums = [89, 923, 78, 100, 92, 8] print(max(nums)) # 923 print(min(nums)) # 8
3)sorted(列表)
将列表中的元素从小到大排序,排序后产生一个新的列表(不修改原列表)
sorted(列表, reverse=True)
将列表中的元素从大到小排序,排序后产生一个新的列表(不修改原列表)
ewNums = sorted(nums)
print(newNums) # [8, 78, 89, 92, 100, 923]
print(nums) # [89, 923, 78, 100, 92, 8]
newNums = sorted(nums, reverse=True)
print(newNums) # [923, 100, 92, 89, 78, 8]
4)sum(列表)
求列表中所有元素的和(列表必须是数字列表)
nums = [89, 923, 78, 100, 92, 8]
print(sum(nums)) # 1290
5)list(序列)
将序列转换成列表(获取序列中所有的元素创建一个新的列表)
注意:所有的序列都可以转换成列表 很重要
print(list('abc')) # ['a', 'b', 'c'] print(list(range(1, 4))) # [1, 2, 3]
作业
1.已知一个数字列表,求列表中心元素。
nums = [1, 2, 5, 7, 9, 11]
l = len(nums)
if len(nums) % 2:
print(nums[l // 2])
else:
print(nums[l // 2 - 1], nums[l // 2])
2.已知一个数字列表,求所有元素和。
nums = [1, 2, 3, 4, 5, 6]
print(sum(nums))
3.已知一个数字列表,输出所有奇数下标元素。
nums = [1, 2, 3, 4, 5, 6, 7, 11]
print(nums[1::2])
4.已知一个数字列表,输出所有元素中,值为奇数的元素。
nums = [1, 2, 3, 4, 5, 7, 11]
for x in nums:
if x % 2:
print(x, end=' ')
print()
5.已知一个数字列表,将所有元素乘二。
例如:nums = [1, 2, 3, 4] —> nums = [2, 4, 6, 8]
nums = [1, 2, 3, 4, 5, 6]
for x in range(len(nums)):
nums[x] *= 2
print(nums)
6.有一个长度是10的列表,数组内有10个人名,要求去掉重复的
例如:names = [‘张三’, ‘李四’, ‘大黄’, ‘大黄’, ‘张三’, ‘张三’, ‘张三’] -> names = [‘张三’, ‘李四’, ‘大黄’]
# 方法一:
names = ['张三', '李四', '大黄', '大黄', '张三', '张三', '张三']
newNames = []
for x in names:
if x not in newNames:
newNames.append(x)
print(newNames)
# 方法二:
names = ['张三', '李四', '大黄', '大黄', '张三', '张三', '张三']
l = len(nums)
for x in range(l):
item =names.pop()
if item not in names:
names.insert(0, item)
print(names)
7.用一个列表来保存一个节目的所有分数,求平均分数(去掉一个最高分,去掉一个最低分,求最后得分)
# 方法一:
nums = [99, 89, 88, 97, 85, 77, 89]
print('平均分:', (sum(nums) - max(nums) - min(nums)) / (len(nums)-2))
# 方法二:
nums = [99, 89, 88, 97, 85, 77, 89]
max1 = min1 = nums[0]
sum = count = 0
for x in nums:
sum += x # 和
count += 1 # 次数
if x > max1:
max1 = x # 取最大值
elif x < min1:
min1 = x # 取最小值
result = (sum - max1 - min1) / (count - 2)
print('平均分:', result)
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 x in A:
if x in B and x not in C:
C.append(x)
print(C)
9.*有一个数字列表,获取这个列表中的最大值.(注意: 不能使用max函数)
例如: nums = [19, 89, 90, 600, 1] —> 600
nums = [19, 89, 90, 600, 1]
max = 0
for x in nums:
if max < x:
max = x
print(max)
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]
counts = []
for num1 in nums:
count = 0
for num2 in nums:
if num2 == num1:
count += 1
counts.append(count)
m = max(counts)
for index in range(len(counts)):
if counts[index] == m:
print(nums[index])
break