Day006 - 列表

切片

常规用法

语法

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

  • 说明

    • 开始下标

      • 下标值(正索引与负索引都行,可混合使用);
      • 确定切片范围的起点,可以被取到,是闭区间操作;
    • : - 固定写法

    • 结束下标

      • 下标值(正索引与负索引都行,可混合使用);
      • 确定切片范围的终点,不能被取到,是开区间操作;
    • 步长

      • 决定切片的方向;(步长对应的方向必须和开始到结束的方向一致,否则切片结果为空
      • 获取元素的方式;(逐一获取还是跳跃获取)
    • 注:切片的有效范围是:[开始下标,结束下标)

  • 例子

    games = ['王者荣耀', '和平精英', '使命召唤', '原神', '诛仙', '穿越火线', '部落冲突', '红警', '魂斗罗']
    print(games[1:5:1])  # ['和平精英', '使命召唤', '原神', '诛仙']
    print(games[1:-1:1])  # ['和平精英', '使命召唤', '原神', '诛仙', '穿越火线', '部落冲突', '红警']
    print(games[3:-1:-1])  # []
    print(games[-1:-5:1])  # []
    print(games[0:-3:2])  # ['王者荣耀', '使命召唤', '诛仙']
    print(games[-1:2:-2])  # ['魂斗罗', '部落冲突', '诛仙']
    print(games[2:-1:1])  # ['使命召唤', '原神', '诛仙', '穿越火线', '部落冲突', '红警']
    

省略步长

  • 列表[开始下标:结束下标] - 列表[开始洗标:结束下标:1]

    • 省略步长,步长就是1
  • 例子

    games = ['王者荣耀', '和平精英', '使命召唤', '原神', '诛仙', '穿越火线', '部落冲突', '红警', '魂斗罗']
    print(games[2:-2])  # ['使命召唤', '原神', '诛仙', '穿越火线', '部落冲突']
    

省略开始下标

  • 列表[:结束下标:步长] - 省略开始下标

  • 列表[:结束下标] - 开始下标与步长都省略

    • 开始下标省略后,步长为正就从第一个原始往后取;步长为负就从后往前取
  • 例子

    print(games[:-3])  # ['王者荣耀', '和平精英', '使命召唤', '原神', '诛仙', '穿越火线']
    print(games[:3:-1])  # ['魂斗罗', '红警', '部落冲突', '穿越火线', '诛仙']
    

省略结束下标

  • 列表[开始下标::步长] - 省略结束洗标

  • 列表[开始下标:] - 省略结束下标与步长

  • 结束下标省略后,步长为正则从开始下标取到最后一个元素,步长为负则从开始下标取到第一个元素

  • 例子

    games = ['王者荣耀', '和平精英', '使命召唤', '原神', '诛仙', '穿越火线', '部落冲突', '红警', '魂斗罗']
    print(games[1:])  # ['和平精英', '使命召唤', '原神', '诛仙', '穿越火线', '部落冲突', '红警', '魂斗罗']
    print(games[3::2])  # ['原神', '穿越火线', '红警']
    print(games[-2::-1])  # ['红警', '部落冲突', '穿越火线', '诛仙', '原神', '使命召唤', '和平精英', '王者荣耀']
    

一起省

  • 列表[::步长]

  • 列表[:]

  • 例子

    print(games[::-1])  # ['魂斗罗', '红警', '部落冲突', '穿越火线', '诛仙', '原神', '使命召唤', '和平精英', '王者荣耀']
    print(games[::2])  # ['王者荣耀', '使命召唤', '诛仙', '部落冲突', '魂斗罗']
    print(games[:])  # ['王者荣耀', '和平精英', '使命召唤', '原神', '诛仙', '穿越火线', '部落冲突', '红警', '魂斗罗']
    

列表元素操作

列表元素删除

  • 删除列表指定元素(让列表元素的个数减少)

列表[下标]

  • 删除列表中指定下标对应的元素;

  • 下标不能越界;

  • 例子

    teleplays = ['琅琊榜', '大秦', '回家的诱惑', '康熙王朝', '破产姐妹', '亮剑', '生活大爆炸', '西游记']
    del teleplays[2]
    print(teleplays)
    

    列表.remove(元素)

  • 删除列表中指定的元素;

  • 如果元素不存在,会报错;

  • 如果匹配到多个元素,只会删除正方向第一个匹配项;

  • 例子

    teleplays.remove('琅琊榜')
    print(teleplays)
    

pop函数

  • 列表.pop() - 取出列表最后一个元素;

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

  • 例子

    teleplays = ['琅琊榜', '大秦', '回家的诱惑', '康熙王朝', '破产姐妹', '亮剑', '生活大爆炸', '西游记']
    del_item = teleplays.pop()
    print(teleplays, del_item, sep='\n')
    del_item = teleplays.pop(2)
    print(teleplays, del_item, sep='\n')
    

列表.clear()

  • 将列表清空

  • 例子

    teleplays = ['琅琊榜', '大秦', '回家的诱惑', '康熙王朝', '破产姐妹', '亮剑', '生活大爆炸', '西游记']
    teleplays.clear()
    print(teleplays)
    

列表元素修改

  • 修改元素的值

列表.[下标] = 值

  • 将列表指定下标对应的元素修改成指定的值;

  • 例子

    teleplays = ['琅琊榜', '大秦', '回家的诱惑', '康熙王朝', '破产姐妹', '亮剑', '生活大爆炸', '西游记']
    print(teleplays)
    teleplays[0] = '庆余年'
    print(teleplays)
    

练习

  1. 练习1:将低于60分的成绩全部修改成0分

    scores = [90, 45, 56, 89, 76, 56, 92, 45, 30, 59, 67, 70]
    for i in range(len(scores)):
        if scores[i] < 60:
            scores[i] = 0
    print(scores)
    
    scores = [90, 45, 56, 89, 76, 56, 92, 45, 30, 59, 67, 70]
    for index, item in enumerate(scores):
        if item < 60:
            scores[index] = 0
    print(scores)
    
    scores = [90, 45, 56, 89, 76, 56, 92, 45, 30, 59, 67, 70]
    new_scores = []
    for item in scores:
        if item >= 60:
            new_scores.append(item)
        else:
            new_scores.append(0)
    print(new_scores)
    
  2. 练习2:删除列表中低于60分的成绩

    scores = [90, 45, 56, 89, 76, 56, 92, 45, 30, 59, 67, 70]
    i = 0
    while i < len(scores):
        if scores[i] < 60:
            scores.remove(scores[i])
            continue
        i += 1
    print(scores)
    

列表相关操作

数学运算符

+ - 加法运算

  • 列表1 + 列表2 - 将列表1和列表2合并成一个新的列表;

* - 乘法运算

  • **列表1 * N(N正整数) ** - N个列表1合并成一个新的列表;

例子

list1 = [100, 200]
list2 = [111, 222]
print(list1 + list2)  # [100, 200, 111, 222]
print(list1 * 3)  # [100, 200, 100, 200, 100, 200]

比较运算符

==、!=

print([1, 2, 3] == [1, 2, 3])  # True
print([1, 2, 3] == [1, 3, 2])  # False
print({1, 2, 3} == {1, 2, 3})  # True 集合无序

>、<、>=、<=

  • 列表比较大小的原理:比较第一对不相等

  • 元素的大小(正索引方向下标相同的元素为一对)

print([1, 2, 3, 4, 5] > [10, 2])  # False
print([10, 0, 1, 1, 1] > [9, 100])  # True

in 与 not in

  • 元素 in 列表 - 判断列表中是否存在指定元素

  • 元素 not in 列表 - 怕段列表中是否不存在指定元素

    print(10 in [10, 20, 30])  # True
    print([10, 20] in [10, 20, 30])  # False
    print([10, 20] in [[10, 20], 30])  # True
    
    v = 34
    if type(v) in [int, float, bool]:
        print('数字')
    else:
        print('不是数字')
    

相关函数和方法

列表相关方法

列表.count(元素)

  • 统计列表中指定元素的个数

    nums = [10, 20, 30, 10]
    print(nums.count(10))  # 2
    print(nums.count(100))  # 0
    

列表.index(元素)

  • 获取指定元素第一次出现在列表中的正索引;

    print(nums.index(10))  # 0
    print(nums.index(100))  # 指定的元素不在列表中会报错
    

列表.rverse()

  • 对列表进行逆序

    nums = [10, 20, 3, 5]
    nums.reverse()
    print(nums)  # [5, 3, 20, 10]
    

列表.sort([reverse=True])

  • 将列表中的元素从小到大排序[从大到小]

    nums = [10, 20, 5, 2, 100]
    nums.sort()
    print(nums)  # [2, 5, 10, 20, 100]
    nums.sort(reverse=True)
    print(nums)  # [100, 20, 10, 5, 2]
    

列表.copy()

  • 复制列表,产生一个元素一模一样的新的列表

作业

1.已知一个数字列表,求列表中心元素。

# list1 = [1, 2, 3, 4, 5, 6, 7]
list1 = [1, 2, 3, 4, 5, 6, 7, 8]
if not list1:
    pass
elif len(list1) % 2 == 1:
    while len(list1) != 1:
        list1.pop(0)
        list1.pop()
else:
    while len(list1) != 2:
        list1.pop(0)
        list1.pop()
print(list1)

2.已知一个数字列表,求所有元素和。

list1 = [1, 2, 3, 4, 5, 6, 7]
sum1 = 0
for item in list1:
    sum1 += item
print(sum1)

3.已知一个数字列表,输出所有奇数下标元素。

list1 = [1, 2, 3, 4, 5, 6, 7]
for index, _ in enumerate(list1):
    if index % 2 == 1:
        print(list1[index])

4.已知一个数字列表,输出所有元素中,值为奇数的元素。

list1 = [1, 2, 3, 4, 5, 6, 7]
for item in list1:
    if item % 2 == 1:
        print(item)

5.已知一个数字列表,将所有元素乘二。

例如:nums = [1, 2, 3, 4] —> nums = [2, 4, 6, 8]

list1 = [1, 2, 3, 4, 5, 6, 7, 8]
for index, _ in enumerate(list1):
    list1[index] = list1[index]*2
print(list1)
# [2, 4, 6, 8, 10, 12, 14, 16]

6.有一个长度是10的列表,数组内有10个人名,要求去掉重复的

例如:names = [‘张三’, ‘李四’, ‘大黄’, ‘大黄’, ‘张三’, ‘张三’, ‘张三’] -> names = [‘张三’, ‘李四’, ‘大黄’]

names = ['张三', '李四', '大黄', '大黄', '张三', '张三', '张三', '赵一', '钱二', '孙三']
index1 = 0
while index1 < len(names):
    if names.count(names[index1]) == 1:
        index1 += 1
    else:
        names.remove(names[index1])
print(names)
# ['李四', '大黄', '张三', '赵一', '钱二', '孙三']

7.用一个列表来保存一个节目的所有分数,求平均分数(去掉一个最高分,去掉一个最低分,求最后得分)

scores = [90, 45, 56, 89, 76, 56, 92, 45, 30, 59, 67, 70]
sum1 = 0
scores.sort()
scores.pop(0)
scores.pop(-1)
for item in scores:
    sum1 += item
print(sum1)
# 653

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 range(len(A)):
    for j, item in enumerate(B):
        if A[i] == B[j]:
            C.append(item)
print(C)
# [1, 'a']

9.有一个数字列表,获取这个列表中的最大值.(注意: 不能使用max函数)

例如: nums = [19, 89, 90, 600, 1] —> 600

nums = [19, 89, 90, 600, 1]
nums.sort()
print(nums[-1])
# 600

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]
max_num, count = 0, 0
for item in nums:
    if nums.count(item) > count:
        count = nums.count(item)
        max_num = item
print(max_num)
# 3
上一篇:python列表


下一篇:JAVA集合