第二周 Day1 — Python列表

第二周 Day 1 — 列表

一、认识列表

heroes = ['亚索', '永恩', '劫', '薇恩', '卡莉斯塔', '金克斯']
for hero in heroes:
    print('我喜欢的英雄是', hero)
1. 什么是列表

列表是容器型数据类型,将[]作为容器标志,里面多个元素用逗号隔开:[元素1, 元素2, 元素3, 元素4,...]

列表是可变的(可变值得是元素的个数、值和顺序可变)

列表是有序的(元素有固定位置信息——下标

元素:任何Python支持的类型的数都可以作为列表,同一个列表的元素的类型可以不同。

list1 = []   # 空列表
list2 = [10, 20, 10, 'abc',12.34, [10, 20], (10, 20), {'a':100},lambda x: x * 2]

二、列表的增删改查

1.“查”—获取元素
  1. 获取单个元素

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

    下标又叫索引,代表元素在序列中的位置信息。

    下标值的范围有两种:

    a.元素从左往右对应的下标是从0开始依次增加。

    b.元素从右往左对应的下标是从-1开始依次减少。

    heroes = ['亚索', '永恩', '劫', '薇恩', '卡莉斯塔', '金克斯']
    print(heroes[0])   # 亚索
    print(heroes[1])   # 永恩
    print(heroes[2])   # 劫
    
    print(heroes[-1])  # 金克斯
    print(heroes[-2])  # 卡莉斯塔
    
    print(heroes[6])   # 下标越界
    print(heroes[-7])  # 下标越界
    
  2. 遍历

    2.1 方法一:直接获取元素。

    """
    for 变量 in 列表:
    	循环体
    """
    for x in heroes:
        print('x:', x)
    

    练习:定义一个列表保存一个班所有学生的分数。

    # 1. 求所有学生的总分
    # 2. 统计不及格学生的分数
    scores = [45, 67, 89, 90, 77, 23, 50]
    sums = 0
    count = 0
    for score in scores:
        sums += score
        if score < 60:
            count += 1
    print('总分:', sums)
    print('不及格学生的个数:', count)
    

    2.2 方法二:通过下标遍历元素。

    len(列表) — 获取列表长度(获取列表元素的个数)

    """
    for 变量 in range(len(列表)):
        循环体
    """
    scores = [45, 67, 89, 90, 77, 23, 50]
    for index in range(len(scores)):
        print(index)            # 0 1 2 3 4 5 6
        print(scores[index])    # 45 67 89 90 77 23 50    
    

    练习:打印位置(下标)在偶数位上的所有元素。

    scores = [45, 67, 89, 90, 77, 23, 50]
    for index in range(len(scores)):
        if not index & 1:
            print(scores[index])
    
  3. 获取部分元素(列表切片)— 返回一个小列表。

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

    步长为:[开始下标,结束下标),从前往后,每次下标增加步长。

    步长为:[开始下标,结束下标),从后往前,每次下标增加步长。

    heroes = ['亚索', '永恩', '劫', '薇恩', '卡莉斯塔', '金克斯']
    print(heroes[1:4:1])     # ['永恩', '劫', '薇恩', '卡莉斯塔']
    print(heroes[1:4:2])     # ['永恩', '薇恩', '金克斯']
    print(heroes[0:-1:1])    # ['亚索', '永恩', '劫', '薇恩', '卡莉斯塔']
    print(heroes[5:1:1])     # []
    print(heroes[1:5:-1])    # []
    print(heroes[-1:-5:1])   # []
    print(heroes[-1:0:-2])   # ['金克斯', '薇恩', '永恩']
    

    3.1 省略步长

    列表[开始下标:结束下标] == 列表[开始下标:结束下标:1]

    heroes = ['亚索', '永恩', '劫', '薇恩', '卡莉斯塔', '金克斯']
    print(heroes[1:5])      # ['永恩', '劫', '薇恩', '卡莉斯塔']
    print(heroes[-5:-2])    # ['永恩', '劫', '薇恩']
    print(heroes[0:-3])     # ['亚索', '永恩', '劫']
    print(heroes[-1:2])     # []
    

    3.2 省略开始下标

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

    列表[:结束下标]

    如果步长为:开始下标省,就从第一个元素往后取。

    如果步长为:开始下标省,就从最后一个元素往前取。

    heroes = ['亚索', '永恩', '劫', '薇恩', '卡莉斯塔', '金克斯']
    print(heroes[:3])        # ['亚索', '永恩', '劫']
    print(heroes[:3:-1])     # ['金克斯', '卡莉斯塔']
    print(heroes[:-3:1])     # ['亚索', '永恩', '劫']
    print(heroes[:-5:-2])    # ['金克斯', '薇恩']
    print(heroes[:4:3])      # ['亚索', '薇恩']
    

    3.3 省略结束下标

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

    列表[开始下标:]

    如果步长为:结束下标省,就从开始下标元素开始从前往后取,取到最后一个元素为止。

    如果步长为:结束下标省,就从开始下标元素开始从后往前取,去到第一个元素为止。

    heroes = ['亚索', '永恩', '劫', '薇恩', '卡莉斯塔', '金克斯']
    print(heroes[1:])       # ['永恩', '劫', '薇恩', '卡莉斯塔', '金克斯']
    print(heroes[-3:])      # ['薇恩', '卡莉斯塔', '金克斯']
    print(heroes[2::2])     # ['劫', '卡莉斯塔']
    print(heroes[-3::-1])   # ['薇恩', '劫', '永恩', '亚索']
    

    3.4 一起省

    列表[::步长]

    如果步长为:从前往后取,取整个列表。

    如果步长为:从后往前取,取整个列表。

    heroes = ['亚索', '永恩', '劫', '薇恩', '卡莉斯塔', '金克斯']
    print(heroes[::2])    # ['亚索', '劫', '卡莉斯塔']
    print(heroes[:])      # ['亚索', '永恩', '劫', '薇恩', '卡莉斯塔', '金克斯']
    print(heroes[::-1])   # ['金克斯', '卡莉斯塔', '薇恩', '劫', '永恩', '亚索']
    
2.“增” — 往列表中添加元素
  1. 列表末尾追加

    列表.append(元素) — 在指定列表的最后追加一个指定的元素

    movies = ['看不见的人', '肖申克的救赎', '唐人街探案', '小森林', '忠犬八公']
    movies.append('触不可及')
    print(movies)      # ['看不见的人', '肖申克的救赎', '唐人街探案', '小森林', '忠犬八公', '触不可及']
    
  2. 列表内插入

    列表.insert(下标, 元素) — 在列表指定下标对应的元素插入指定元素

    movies = ['看不见的人', '肖申克的救赎', '唐人街探案', '小森林', '忠犬八公']
    movies.insert(1, '星际穿越')
    print(movies)       # ['看不见的人', '星际穿越', '肖申克的救赎', '唐人街探案', '小森林', '忠犬八公']
    

练习:输入一个学生的成绩,将输入的成绩插入到列表scores,并且保证插入后不影响从大到小的规律。

scores = [100, 97, 95, 87, 82, 82, 80, 76, 72, 65, 60, 57, 53, 40]
score = int(input('输入一个成绩:'))
for index in range(len(scores)):
    if score > scores[index]:
        scores.insert(index, score)
        break
else:
    scores.append(score)
print(scores)
3.“删” — 删除列表中某个元素

del 列表[下标] — 删除列表中指定下标对应的元素(下标不能越界)

# a.删除变量
name = '小明'
del name
print(name)    # 报错

# b. 删除列表中指定元素
nums = [10, 1, 2, 32]
del nums[-1]
print(nums)    # [10, 1, 2]

# c. 删除整个列表
del nums
print(nums)    # 报错

列表.remove(元素) — 删除列表中指定元素(如果指定元素有多个,只删最前面那一个;如果指定元素不存在,会报错!)

TVs = ['琅琊榜', '破产姐妹', '甄嬛传', '庆余年']
TVs.remove('甄嬛传')
print(TVs)      # ['琅琊榜', '破产姐妹', '庆余年']

TVs = ['琅琊榜', '破产姐妹', '甄嬛传', '庆余年','甄嬛传', '甄嬛传']
TVs.remove('甄嬛传')
print(TVs)      # ['琅琊榜', '破产姐妹', '庆余年', '甄嬛传', '甄嬛传']

TVs = ['琅琊榜', '破产姐妹', '甄嬛传', '庆余年']
TVs.remove('大江大河')
print(TVs)      # 报错ValueError: list.remove(x): x not in list

列表.pop() — 取出列表中最后一个元素

列表.pop(下标) — 取出列表中指定下标对应的元素

TVs = ['琅琊榜', '破产姐妹', '甄嬛传', '庆余年','甄嬛传', '甄嬛传', '白夜追凶']
del_items = TVs.pop()
print(TVs, del_items)     # ['琅琊榜', '破产姐妹', '甄嬛传', '庆余年','甄嬛传', '甄嬛传'] 白夜追凶

TVs = ['琅琊榜', '破产姐妹', '甄嬛传', '庆余年','甄嬛传', '甄嬛传', '白夜追凶']
TVs.pop(1)
print(TVs)      # ['琅琊榜', '甄嬛传', '庆余年','甄嬛传', '甄嬛传', '白夜追凶']
4.“改” — 修改元素的值

语法:列表[下标] = 值 — 将列表中指定下标对应的元素修改成指定的值

subject = ['高数', '大物', 'c语言', '毛概']
subject[0] = '英语'
print(subject)     # subject = ['英语', '大物', 'c语言', '毛概']

练习:已经列表scores,将列表中低于60分的成绩全部修改成60分。

scores = [89, 9, 78, 23, 76, 99, 66]
for index in range(len(scores)):
    if scores[index] < 60:
        scores[index] = 60
print(scores)       # [89, 60, 78, 60, 76, 99, 66]
5. innot in

值 in 列表 — 判断列表中是否存在指定值对应的元素

值 not in 列表 — 判断列表中是否不存在指定值对应的元素

TVs = ['琅琊榜', '破产姐妹', '甄嬛传', '庆余年', '甄嬛传', '甄嬛传', '白夜追凶']
print('甄嬛传' in  TVs)        # True
print('甄嬛传2' in  TVs)       # False
print('甄嬛传2' not in  TVs)   # True
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值