day6列表的增删改查

列表

列表的作用

  1. 不用列表:

定义变量保存一个班所有学生的成绩:

score1 = 56
score2 = 67
score3 = 90
score4 = 89
score5 = 34
score6 = 81
score7 = 91
score8 = 99
score9 = 85
score10 = 77

平均分:

print('所有学生平均分:', (score1 + score2 + score3 + score4 + score5 + score6 + score7 + score8 + score9 + score10) / 10)

最高分:

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)
  1. 运用列表:
scores = [89, 56, 45, 77, 99, 82, 77, 67, 90, 91]
print('平均分:', sum(scores) / len(scores))
print(max(scores))

列表在需要同时处理多个数据的时候非常有用

认识列表

  1. 什么是列表(list)

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

  2. 空列表

    list1 = [ ]
    list2 = []
    print(list1, list2)                 # [] []
    print(len(list1), len(list2))       # 0 0
    
  3. 列表中的元素可以是任何类型的数据

    list3 = [10, 1.23, False, None, 'abc', [10, 20]]
    print(list3)
    # [10, 1.23, False, None, 'abc', [10, 20]]
    
  4. 列表是有序的(顺序影响结果)

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

查操作

查多个元素

一次获取一个元素

语法:
列表[下标] - 获取指定列表中指定下标对应的元素

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

注意:下标不能越界

nums = [100, 98, 78, 99, 50]
print(nums[1], nums[-4])    # 98 98
print(nums[-1])             # 50
# print(nums[5])            # IndexError: list index out of range
# print(nums[-6])           # IndexError: list index out of range
切片

一次获取多个元素(一次有规律的获取多个元素)

  1. 完整的语法

    语法:
    列表[开始下标:结束下标:步长] - 根据下标和步长获取指定列表中的部分元素

    a. 怎么确定切片结果

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

    b. 怎么写切片

    第一步:确定开始下标(目标对应的第一个元素对应的下标)
    第二步:确定步长
    确定正负号:看目标元素在原列表中的顺序是从前往后(+)还是从后往前(-)
    确定绝对值
    第三步:确定结束下标: 保证需要获取的数据全部在有效范围内

    由代码知道元素:

    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])     # ['王昭君','百里守约','孙悟空']
    

    由获取元素写代码:

    heroes = ['王昭君', '孙斌', '李白', '百里守约', '墨子', '澜', '孙悟空', '诸葛亮', '李信', '妲己']
    
    # ['王昭君', '孙斌', '李白']
    print(heroes[0:3:1])
    
    # ['百里守约', '墨子', '澜', '孙悟空']
    print(heroes[3:-3:1])
    
    # ['诸葛亮',  '孙悟空', '澜']
    print(heroes[-3:4:-1])
    
    # ['孙斌', '墨子', '诸葛亮']
    print(heroes[1:-2:3])
    
    # ['妲己', '澜', '孙斌']
    print(heroes[-1:0:-4])
    
    # ['孙斌', '李白', '百里守约', '墨子', '澜', '孙悟空', '诸葛亮', '李信']
    print(heroes[1:-1:1])
    
  2. 切片的省略写法

    a. 省略步长 - 相当于步长为1

    b.省略开始下标 - 表示从头开始(看步长的正负,开始下标在第一个或者在最后一个)

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

    ​ 如果步长为负就从开始下标开始一直取到第一个元素

    注意:省略结束下标时结束下标在有效范围内

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

一个一个的获取列表中所有的元素

len(列表) - 获取列表中元素的个数

  1. 方法1:直接获取列表中的元素

    for 变量 in 列表:
    循环体中的变量直接是列表的元素

    games = ['王者荣耀','lol','和平精英','永劫无间','apex','2k','植物大战僵尸','开心消消乐']
    for x in games:
        print(x)
    
  2. 方法2:通过下标来遍历列表

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

    games = ['王者荣耀','lol','和平精英','永劫无间','apex','2k','植物大战僵尸','开心消消乐']
    for index in range(len(games)):
        print(index,games[index])
    
  3. 方法3:同时获取下标和元素

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

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

练习1:计算nums中所有元素的和

nums = [12, 45, 8.34, 56, 23]
sum = 0
for i in nums:
    sum += i
print(sum)

练习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)

增删改操作

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

    nums = [10,20,30]
    print(nums)       # [10,20,30]
    
    nums.append(100)
    print(nums)       # [10,20,30,100]
    
    nums.append(200)
    print(nums)      # [10,20,30,100,200]
    
  2. 列表.insert(下标,数据) - 在列表指定下标对应元素前插入指定数据

    nums = [10,20,30]
    print(nums)         # [10, 20, 100]
    
    nums.insert(-1,100)
    print(nums)         # [10, 20, 100, 30]
    
    nums.insert(0,200)
    print(nums)         # [200, 10, 20, 100, 30]
    

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

nums = [17,89,90,81,84,4,56]
nums_new = []
for i in nums:
    if i % 2 == 0:
        nums_new.append(i)
print(nums_new)
删 - 删除元素
  1. del 列表[下标] - 删除列表中指定下标对应的元素

    games = ['王者荣耀', 'lol', '和平精英', '永劫无间', 'apex', '2k', '植物大战僵尸', '开心消消乐']
    del games[2]
    print(games)
    # ['王者荣耀', 'lol','永劫无间', 'apex', '2k', '植物大战僵尸', '开心消消乐']
    
  2. 列表.remove(元素) - 删除列表中指定元素(如果元素不存在会报错;如果元素有多个,只会删除最前面的那一个)

    games = ['王者荣耀', '开心消消乐','lol', '和平精英', '永劫无间', 'apex', '2k', '植物大战僵尸', '开心消消乐']
    games.remove('和平精英')
    print(games)
    # ['王者荣耀', '开心消消乐','lol', '永劫无间', 'apex', '2k', '植物大战僵尸', '开心消消乐']
    
    # games.remove('部落冲突')   # ValueError: list.remove(x): x not in list
    games.remove('开心消消乐')
    print(games)
    # ['王者荣耀', 'lol', '和平精英', '永劫无间', 'apex', '2k', '植物大战僵尸', '开心消消乐']
    
  3. pop

    a. 列表.pop() - 取出列表最后一个元素,并且返回

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

    b. 列表.pop(下标) - 取出列表指定下标对应的元素,并且返回

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

列表[下标] = 新元素 - 修改列表中指定下标对应的元素为新的元素

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

games[0] = '部落冲突'
print(games)
# ['部落冲突', 'lol', '和平精英', '永劫无间', 'apex', '2k', '植物大战僵尸', '开心消消乐']

games[-1] = '炉石传说'
print(games)
# ['部落冲突', 'lol', '和平精英', '永劫无间', 'apex', '2k', '植物大战僵尸', '炉石传说']

案例:将score中所有不及格的分数全部修改为”重修“

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

列表相关操作

数学运算符
  1. 列表1 + 列表2 - 将连个列表中的元素依次合并成一个新的列表

    list1 = [10, 20]
    list2 = [100, 200, 300]
    list3 = list1 + list2
    print(list3)        # [10, 20, 100, 200, 300]
    
  2. 列表 * N 、N * 列表 - 列表中元素重复N遍产生一个新的列表

    list1 = [10, 20]
    list4 = list1 * 3           # list1 + list1 + list1   [10, 20, 10, 20, 10, 20]
    print(list4)                # [10, 20, 10, 20, 10, 20]
    
in和not in操作

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

print(10 in [10, 20, 30])               # True
print([10, 20] in [10, 20, 30])         # False
print([10] in [10, 20, 30])             # False
print([10] in [[10], 20, 30])           # True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值