Python Day5 列表及相关操作【零基础】

发布于:2023-02-13 ⋅ 阅读:(627) ⋅ 点赞:(0)

Day5 列表


在之前我们学习了变量,可以对变量进行操作,那么我们如何对多个变量或者多个元素进行批量且有选择性的操作呢?那就得用到列表啦!

1. 列表的作用

接下来我们运用之前学过的知识来进行学生成绩的数据保存操作以及运用列表来比较一下便捷性。

1.2 普通运用

  1. 定义变量保存一个学生的成绩
score = 100
  1. 定义变量保存一个班所有学生的成绩
score1 = 56
score2 = 67
score3 = 90
score4 = 89
score5 = 34
score6 = 81
score7 = 91
score8 = 99
score9 = 85
score10 = 77
  1. 求学生成绩平均值
print('所有学生平均分:', (score1 + score2 + score3 + score4 + score5 + score6 + score7 + score8 + score9 + score10) / 10)

所有学生平均分: 76.9

  1. 求学生成绩的最高分
max_score = score1
if score2 > max_score:
    max_score = score2

if score3 > max_score:
    max_score = score3

if score4 > max_score:
    max_score = score4

if score5 > max_score:
    max_score = score5

if score6 > max_score:
    max_score = score6

if score7 > max_score:
    max_score = score7

if score8 > max_score:
    max_score = score8

if score9 > max_score:
    max_score = score9

if score10 > max_score:
    max_score = score10

print(max_score)

99

2.2 列表运用

scores = [89, 56, 45, 77, 99, 82, 77, 67, 90, 91]
print('平均分:', sum(scores) / len(scores))
print(max(scores))

平均分: 77.3
99
总结: 在以上的比较中,运用列表只需要三行代码即可完成,列表的操作更加便捷和灵活,减少我们的工作量,列表在需要同时处理多个数据的时候非常有用

2. 认识列表

在了解到列表的作用后,一起来认识一下列表吧!

2.1 什么是列表(list)

1)列表是容器型数据类型,将[]作为容器标志,里面多个数据用逗号隔开:[数据1, 数据2, 数据3, …]
2)列表是可变的(可变指的是容器中元素的个数和值可变,支持增删改)
列表是有序的(支持下标操作)
3)元素的要求:没有要求(任何类型的数据都可以作为列表的元素,同一个列表中的元素类型也可以不一样)

2.2 空列表

列表中只有一个空格也算是空列表

list1 = [ ]
list2 = []
print(list1, list2)            # [] []
print(len(list1), len(list2))  # 0 0

[] []
0 0

2.3 列表中元素的类型

列表中的元素可以是任何类型的数据

list3 = [10, 1.23, False, None, 'abc', [1, 2]]
print(list3)

[10, 1.23, False, None, ‘abc’, [1, 2]]

2.4 列表中元素是否有序

列表是有序的(通过下标,顺序影响结果)

print([10, 20, 30] == [10, 30, 20])         # False
print({10, 20, 30} == {10, 30, 20})         # True (集合无序)

False
True

3. 查操作

3.1 查单个元素

一次获取一个元素
语法:
列表[下标] : 获取制定列表中制定下标对应的元素

说明:
1)列表:需要获取元素的列表(可以是任何结果是列表的表达式,比如:保存列表的变量,具体的列表数据等)
2)[ ] : 固定写法
3)下标:又叫索引,是列表中元素在列表中的位置信息
(每个有序序列中的索引数都有两个索引值,一个是从0往后开始不断递增的,另一个是从后往前从-1开始不断递减的)

注意:下标不能越界

nums = [100, 98, 78, 88, 99]
print(nums[1], nums[-4])
print(nums[-1])

98 98
99

3.2 切片

一次获取多个元素
语法:
列表[开始下标:结束下标:步长] —— 根据下标和步长获取指定列表中的部分元素
1)怎么确定切片结果

  • 第一步:确定结果是否为空列表(看从开始下标的位置到结束下标的方向和步长对应的方向是否一致,如果方向一致结果一定不为空,反之一定为空)
    步长为正:表示从前往后取
    步长为负,表示从后往前取
  • 第二步:确定有效范围 -开始下标对应的元素取得的,结束下标对应的元素取不到
  • 第三步:在有效范围内,按照步长的绝对值确定获取内容。
    如果绝对值为1,在有效范围内容一个一个按顺序获取
    如果绝对值是2,在有效范围内容内取1个跳1个再取1个
    如果绝对值是3,在有效范围内容内取1个跳2个再取1个

2)怎么写切片

  • 第一步:确定开始下标(目标对应的第一个元素的下标)
  • 第二步:确定步长
    确定正负号:看目标元素在原列表中的顺序是从前往后(+)还是从后往前(-)
  • 第三步:确定结束下标:要注意切片写的结束下标元素是取不到的,那么我们就看情况扩大范围即可
heroes = ['王昭君', '孙膑', '李白', '百里守约', '墨子', '澜', '孙悟空', '诸葛亮', '李信', '妲己']

在这里插入图片描述
根据切片写元素:

print(heroes[-1:1:2])
print(heroes[2:7:-2])
print(heroes[8:1:3])
print(heroes[6:0:-2])
print(heroes[-1:1:-1])
print(heroes[0:7:3])
'''
[]  # 顺序不一,为空
[]  # 顺序不一,为空
[]  # 顺序不一,为空
['孙悟空', '墨子', '李白']
['妲己', '李信', '诸葛亮', '孙悟空', '澜', '墨子', '百里守约', '李白']
['王昭君', '百里守约', '孙悟空']
'''

根据元素写切片:

'''
['诸葛亮',  '孙悟空', '澜']
['孙膑', '墨子', '诸葛亮']
['孙膑', '李白', '百里守约', '墨子', '澜', '孙悟空', '诸葛亮', '李信']
'''
print(heroes[-3:-6:-1])
print(heroes[1:8:3])
print(heroes[1:-1:1])

3.3 切片的省略写法

列表[开始下标:结束下标:步长]

a.省略步长 - 相当于步长是1
列表[开始下标:结束下标]

b.省略开始下标 - 表示从头开始(开始下标在第一个或者最后一个)
列表[:结束下标:步长]、列表[:结束下标]

c.省略结束下标 - 如果如果步长为正从开始下标一直取到最后一个元素,如果步长为正一直取到第一个元素

heroes = ['王昭君', '孙膑', '李白', '百里守约', '墨子', '澜', '孙悟空', '诸葛亮', '李信', '妲己']
print(heroes[:2:-1])
print(heroes[:4:2])
print(heroes[:4:-2])
print(heroes[:-4])
print(heroes[2::-1])
print(heroes[:])

[‘妲己’, ‘李信’, ‘诸葛亮’, ‘孙悟空’, ‘澜’, ‘墨子’, ‘百里守约’]
[‘王昭君’, ‘李白’]
[‘妲己’, ‘诸葛亮’, ‘澜’]
[‘王昭君’, ‘孙膑’, ‘李白’, ‘百里守约’, ‘墨子’, ‘澜’]
[‘李白’, ‘孙膑’, ‘王昭君’]
[‘王昭君’, ‘孙膑’, ‘李白’, ‘百里守约’, ‘墨子’, ‘澜’, ‘孙悟空’, ‘诸葛亮’, ‘李信’, ‘妲己’]

3.4 遍历

一个一个获取列表中所有的元素
补充:len(列表) - 获取列表中元素的个数
方法1:

for 变量 in 列表:
    循环体
games = ['王者荣耀', 'lol', '和平精英', '永劫无间', 'apex', '2k', '植物大战僵尸', '开心消消乐']
for x in games:
    print(x)

王者荣耀
lol
和平精英
永劫无间
apex
2k
植物大战僵尸
开心消消乐

# 练习1:计算nums中所有元素的和
nums = [12, 45, 8.34, 56, 23]
count = 0
for i in nums:
    count += i
print(count)

# 练习2:统计nums中所有偶数的个数
nums = [23, 88, 90, 88, 67, 55, 11]
count = 0
for i in nums:
    if i % 2 == 0:
        count += 1
print(count)

# 练习3: 统计list1中字符串的个数
list1 = [109, 23.4, True, 'abc', 'helo', 23, '12', False, None]
count = 0
for i in list1:
    if type(i) == str:
        count += 1
print(count)

144.34
3
3

方法2:通过遍历下标来遍历列表

for 变量 in range(len(列表)):
    循环体中的变量获取到的是每个元素的下标,然后需要通过下标获取元素
for index in range(len(games)):
    print(index, games[index])

0 王者荣耀
1 lol
2 和平精英
3 永劫无间
4 apex
5 2k
6 植物大战僵尸
7 开心消消乐

方法3:同时获取下标和元素

for 变量1, 变量2, in enumerate(列表):
    循环体中变量1是每个元素的下标,变量2是每个元素
for index, item in enumerate(games):
    print(index, item)

0 王者荣耀
1 lol
2 和平精英
3 永劫无间
4 apex
5 2k
6 植物大战僵尸
7 开心消消乐

4.增删改的操作

4.1 增 - 增加元素

1)列表.append(元素) - 在列表的最后添加元素

nums = [10, 20, 30]
print(nums)     # [10, 20, 30]

nums.append(40)
print(nums)     # [10, 20, 30, 40]

[10, 20, 30]
[10, 20, 30, 40]

2)列表.insert(下标, 数据) - 列表指定下标对应的元素 前 插入指定数据

nums = [10, 20, 30, 40]
print(nums)     # [10, 20, 30, 40]

nums.insert(2, 50)
print(nums)

[10, 20, 30, 40]
[10, 20, 50, 30, 40]

练习:使用一个新的列表提取nums中所有的偶数

nums = [17, 89, 90, 81, 84, 4, 56]
# [90, 84, 4, 56]
even_nums = []
for i in nums:
    if i % 2 == 0:
        even_nums.append(i)
print(even_nums)

[90, 84, 4, 56]

4.2 删 - 删除元素

1)del 列表[下标] - 删除列表中指定下标对应的元素,写元素下标

games = ['王者荣耀', 'lol', '和平精英', '永劫无间', 'apex', '2k', '植物大战僵尸', '开心消消乐']
print(games)

del games[2]
print(games)

[‘王者荣耀’, ‘lol’, ‘和平精英’, ‘永劫无间’, ‘apex’, ‘2k’, ‘植物大战僵尸’, ‘开心消消乐’]
[‘王者荣耀’, ‘lol’, ‘永劫无间’, ‘apex’, ‘2k’, ‘植物大战僵尸’, ‘开心消消乐’]

2)列表.remove(元素) - 删除列表中指定元素,直接写元素(如果元素不在会报错,如果删除元素还有其他重复相同的元素,那么只删除第一个)

games = ['王者荣耀', 'lol', '和平精英', '永劫无间', 'apex', '2k', '植物大战僵尸', '开心消消乐']
print(games)

games.remove('和平精英')
print(games)

# games.remove('部落冲突')      # ValueError: list.remove(x): x not in list
games.remove('开心消消乐')
print(games)

[‘王者荣耀’, ‘lol’, ‘和平精英’, ‘永劫无间’, ‘apex’, ‘2k’, ‘植物大战僵尸’, ‘开心消消乐’]
[‘王者荣耀’, ‘lol’, ‘永劫无间’, ‘apex’, ‘2k’, ‘植物大战僵尸’, ‘开心消消乐’]
[‘王者荣耀’, ‘lol’, ‘永劫无间’, ‘apex’, ‘2k’, ‘植物大战僵尸’]

3)
列表.pop() - 取出列表最后一个元素
列表.pop(下标) - 取出列表指定下标对应的元素

4.3 改 - 修改元素的值

games = ['王者荣耀', 'lol', '和平精英', '永劫无间', 'apex', '2k', '植物大战僵尸', '开心消消乐']
x = games.pop()
print(games, x)

x = games.pop(2)
print(games, x)

[‘王者荣耀’, ‘lol’, ‘和平精英’, ‘永劫无间’, ‘apex’, ‘2k’, ‘植物大战僵尸’] 开心消消乐
[‘王者荣耀’, ‘lol’, ‘永劫无间’, ‘apex’, ‘2k’, ‘植物大战僵尸’] 和平精英

案例:将scores中所有不及格的分数全部修改成"重修"

scores = [89, 23, 79, 99, 45, 60, 78, 59]
# [89, '重修', 79, 99, '重修', 60, 78, '重修']
for index, item in enumerate(scores):
    if item < 60:
        scores[index] = '重修'
print(scores)

[89, ‘重修’, 79, 99, ‘重修’, 60, 78, ‘重修’]

5. 列表相关操作

5.1 数学运算符:+、*

列表1 + 列表2 - 将两个列表中的元素拼凑合并成一个新的列表

list1 = [1, 4, 5, 3]
list2 = [10, 40, 50, 30, 20]
list3 = list1 + list2
print(list3)

[1, 4, 5, 3, 10, 40, 50, 30, 20]

列表 * N 或 N * 列表 - 列表中的元素重复N遍产生一个新的列表

list1 = [10, 20]
list4 = list1 * 3
print(list4)

[10, 20, 10, 20, 10, 20]

5.2 in 和 not in操作

元素 in 列表 - 判断列表中是否存在指定的元素
元素 not in 列表 - 判断列表中是否不存在指定的元素

print(10 in [10, 20, 30])
print([10] in [10, 20, 30])
print([10] in [[10], 10, 20, 30])

True
False
True