2021.03.08

本文详细介绍了Python列表的操作,包括列表的定义、元素的查找、切片、遍历,以及如何添加、删除和修改元素。此外,还涉及列表的数学运算、比较操作、内置函数的使用,如max、min、sorted和sum。通过实例展示了列表的各种用法,帮助理解列表的动态性和灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2021.03.08

总结

列表(list)

1.列表是容器型数据类型; 将[]作为容器标志,里面多个数据用逗号隔开:[元素1, 元素2, 元素3,…]
列表是可变(可变指的是元素的个数可变;元素的值变量;元素的顺序可变)、列表是有序的(每个元素都有一个表示元素在列表中位置的序号)
元素(容器中的每个独立的数据就是元素):没有要求(任何类型的数据都可以作为列表的元素

2.查 - 获取元素

2.1 查单个 - 获取列表中某一个元素

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

说明:
列表 - 任何结果是列表的表达式,例如:具体的一个列表值、保存列表的变量
[] - 固定写法
下标 - 又叫索引。它是元素在列表中的位置信息。
取值方式1:从0开始依次增加,其中0表示第一个元素,1表示第二个元素
取值方式2:从-1开始依次减少,其中-1表示倒数第一个元素,-2表示倒数第二个元素…

names = ['林俊杰', '周杰伦', '王力宏', '陈奕迅', '薛之谦', '邓紫棋']
print(names[2])    # 王力宏
print(names[-2])    # 薛之谦
print(names[5])     # 邓紫棋
print(names[-6])    #林俊杰

2.2 切片(查部分) - 同时获取列表中的多个元素

原理:通过提供下标的范围来获取范围内下标对应的元素
语法:
列表[开始下标:结束下标:步长] - 从开始下标开始,每次下标值增加步长,取到结束下标前为止。

注意:
1)结束下标对应的元素一定取不到, 开始下标对应的元素可以取到
2)如果步长为正,表示从前往后取,这个时候开始下标对应的位置必须在结束下标对应的位置前,否则结果是[]
3)如果步长为负,表示从后往前取,这个时候开始下标对应的位置必须在结束下标对应的位置后,否则结果是[]

names = ['林俊杰', '周杰伦', '王力宏', '陈奕迅', '薛之谦', '邓紫棋']
print(names[1:4:1])   # ['周杰伦', '王力宏', '陈奕迅']
print(names[1:-1:1])    # ['周杰伦', '王力宏', '陈奕迅', '薛之谦']
print(names[0:5:2])     # ['林俊杰', '王力宏', '薛之谦']

print(names[1:5:-1])   # []
print(names[5:0:2])     # []
print(names[2:-1:1])    # ['王力宏', '陈奕迅', '薛之谦']

print(names[1:4:2])  # ['周杰伦', '陈奕迅']
print(names[-5:4:2])

print(names[-1:1:-3])   # ['邓紫棋', '王力宏']
  1. 省略步长 - 相当于步长是1

​ 列表[开始下标:结束下标]

names = ['林俊杰', '周杰伦', '王力宏', '陈奕迅', '薛之谦', '邓紫棋']
print(names[1:-1])
print(names[-5:3])
print(names[4:-6])    # []

2)省略开始下标

​ 列表[:结束下标:步长] - 步长为正,从第一个元素开始往后取 ;步长为负,从最后一个元素开始往前取

​ 列表[:结束下标] - 从第一个元素开始往后取

heroes = ['后裔', '李元芳', '诸葛亮', '娜可露露', '甄姬', '王昭君', '孙膑']
print(heroes[:4:2])   # ['后裔', '诸葛亮']
print(heroes[:2:-1])    # ['孙膑', '王昭君', '甄姬', '娜可露露']
print(heroes[:-1])      # ['后裔', '李元芳', '诸葛亮', '娜可露露', '甄姬', '王昭君']

3)省略结束下标

​ 列表[开始下标::步长] - 步长为正,从开始下标开始取到最后一个元素为止(往后取,取完为止);步长为负,从开始下标开始取到第一个元素为止

​ 列表[开始下标:] - 从开始下标开始取到最后一个元素为止

print(heroes[1:])       # ['李元芳', '诸葛亮', '娜可露露', '甄姬', '王昭君', '孙膑']
print(heroes[2::-1])    # ['诸葛亮', '李元芳', '后裔']
print(heroes[-1::-2])   # ['孙膑', '甄姬', '诸葛亮', '后裔']

4)一起省

​ 列表[::步长]

​ 列表[:]

heroes = ['后裔', '李元芳', '诸葛亮', '娜可露露', '甄姬', '王昭君', '孙膑']
print(heroes[::-1])     # ['孙膑', '王昭君', '甄姬', '娜可露露', '诸葛亮', '李元芳', '后裔']
print(heroes[::2])      # ['后裔', '诸葛亮', '甄姬', '孙膑']
print(heroes[:])        # ['后裔', '李元芳', '诸葛亮', '娜可露露', '甄姬', '王昭君', '孙膑']

2.3 遍历

方法一: 直接获取元素
for 变量 in 列表:
循环体

变量取到的就是列表中的每个元素

方法二:先获取每个元素对应的下标,然后再通过下标获取元素
for 变量 in range(列表长度):
列表[变量]

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

练习:统计列表中分数不及格的个数

scores = [90, 89, 67, 54, 32, 99, 67, 10]
count = 0
for x in scores:
    if x < 60:
        count += 1
print(count)

练习:给一个数字列表,打印列表中所有的3的倍数对应的元素

nums = [23, 9, 34, 5, 15, 6]
for x in nums:
    if x % 3 == 0:
        print(x)

增 - 往列表中添加元素

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

subjects = ['iOS', '安卓']
print(subjects)
subjects.append('h5')
print(subjects)    # ['iOS', '安卓', 'h5']

subjects.append(100)
print(subjects)     # ['iOS', '安卓', 'h5', 100]

subjects.append([10, 20])
print(subjects)     # ['iOS', '安卓', 'h5', 100, [10, 20]]
print(subjects[-1])     # [10, 20]
print(subjects[-1][-1])    # [10, 20][-1] == 20]

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

tvs = ['甄嬛传', '还珠格格', '情深深雨蒙蒙', '琅琊榜']
tvs.insert(1, '庆余年')
print(tvs)      # ['甄嬛传', '庆余年', '还珠格格', '情深深雨蒙蒙', '琅琊榜']

tvs.insert(0, '西游记')
print(tvs)      # ['西游记', '甄嬛传', '庆余年', '还珠格格', '情深深雨蒙蒙', '琅琊榜']

练习:将输入的成绩插入到scores中,要求插入后不影响分数从大到小排序的性质

scores = [100, 98, 97, 97, 89, 86, 72, 66, 63, 59, 42]
num = float(input('请输入一个分数(0~100):'))
for index in range(len(scores)):
    if scores[index] <= num:
        scores.insert(index, num)
        break
else:
    scores.append(num)

print(scores)

删 - 删除列表中的元素

​ 1 .del 列表[下标] - 删除列表中指定下标对应的元素

tvs = ['西游记', '甄嬛传', '庆余年', '还珠格格', '情深深雨蒙蒙', '琅琊榜']
del tvs[-2]
print(tvs)      # ['西游记', '甄嬛传', '庆余年', '还珠格格', '琅琊榜']

​ 2 .列表.remove(元素) - 删除列表中指定的元素

如果元素不存在会报错;如果被删除的元素在列表中有多个,只删最前面的那一个

tvs = ['西游记', '甄嬛传', '庆余年', '还珠格格', '情深深雨蒙蒙', '琅琊榜']
tvs.remove('情深深雨蒙蒙')
print(tvs)  # ['西游记', '甄嬛传', '庆余年', '还珠格格', '琅琊榜']
tvs = ['西游记', '甄嬛传', '庆余年', '还珠格格', '庆余年', '情深深雨蒙蒙', '琅琊榜']
tvs.remove('庆余年')
print(tvs)      # ['西游记', '甄嬛传', '还珠格格', '庆余年', '情深深雨蒙蒙', '琅琊榜']

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

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

tvs = ['西游记', '甄嬛传', '庆余年', '还珠格格', '情深深雨蒙蒙', '琅琊榜']
result = tvs.pop()
print(tvs)      # ['西游记', '甄嬛传', '庆余年', '还珠格格', '情深深雨蒙蒙']
print(result)   # 琅琊榜

tvs = ['西游记', '甄嬛传', '庆余年', '还珠格格', '情深深雨蒙蒙', '琅琊榜']
result = tvs.pop(1)
print(tvs)      # ['西游记', '庆余年', '还珠格格', '情深深雨蒙蒙', '琅琊榜']
print(result)   # 甄嬛传

​ 4.改 - 修改某个元素的值

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

tvs = ['琅琊榜', '庆余年', '甄嬛传']
tvs[0] = '生活大爆炸'
print(tvs)  # ['生活大爆炸', '庆余年', '甄嬛传']

练习:将分数列表中所有低于60分的分数修改成’不及格’

scores = [78, 90, 20, 34, 78, 99, 34, 55]
for index in range(len(scores)):
    if scores[index] < 60:
        scores[index] = '不及格'
print(scores)   # [78, 90, '不及格', '不及格', 78, 99, '不及格', '不及格']

列表数学运算: +、*

​ 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]

比较运算:==、!=、>、<、>=、<=

​ 1 比较是否相等

print([10, 20, 30] == [10, 20, 30])    # True
print([10, 20, 30] == [30, 20, 10])    # False

​ 2 比较大小 - 比较第一对不相等的元素的大小(两个列表相同位置上的元素是一对)

print([100, 200] > [10, 20, 30, 40, 10000])    # True
print([100, 200, 300] > [100, 1000, 2])     # False

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)       # True
print([10] in nums)     # False

相关函数:max、min、sorted、sum、list、len

​ 1 .max(列表) - 获取列表中最大的元素(这个列表中的元素类型一致,并且元素本身支持比较元素)

nums = [89, 923, 78, 100, 92, 8]
print(max(nums))    # 923
print(min(nums))    # 8

​ 2.sorted(列表) - 将列表中的元素从小到大排序,排序后产生一个新的列表

sorted(列表) - 将列表中的元素从小到大排序,排序后产生一个新的列表

new_nums = sorted(nums)
print(new_nums)     # [8, 78, 89, 92, 100, 923]
print(nums)         # [89, 923, 78, 100, 92, 8]

new_nums = sorted(nums, reverse=True)
print(new_nums)     # [923, 100, 92, 89, 78, 8]

​ 3 .sum(列表) - 求列表中所有元素的和(列表必须是数字列表)

nums = [89, 923, 78, 100, 92, 8]
print(sum(nums))    # 1290

​ 4 list(序列) - 将序列转换成列表(获取序列中所有元素创建一个新的列表)

注意:所有的序列都可以转换成列表

print(list('abc'))          # ['a', 'b', 'c']
print(list(range(1, 4)))    # [1, 2, 3]

作业

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

list=[1,2,3]
print(list[1])

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

list=[1,2,3]
print(sum(list))

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

list=[1,2,3]
for x in range(len(list)):
    if x%2==0:
        print(x)

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

list=[1,2,3]
for x in list:
    if x %2!=0:
        print(x)

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

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

nums=[1,2,3,4]
for x in range(len(nums)):
    nums[x]*= 2
print(nums)

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

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

names = ['张三', '李四', '大黄', '大黄', '张三', '张三', '张三','李四', '大黄', '大黄']
new_names = []
for x in names:
    if x not in new_names:
        new_names.append(x)
        names = new_names
print(names)

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

nums=[100,20,30,79,60]
new_nums=sorted(nums)
for x in new_nums:
    new_nums.pop(0)
    new_nums.pop(-1)
    print(sum(new_nums)/3)

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]
num=[]
for x in A:
    for z in B:
        if x==z:
            num.append(x or z)
            C = num
print(C)

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

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

nums = [19, 89, 90, 600, 1]
new_nums=sorted(nums)
print(new_nums[-1])

10.*获取列表中出现次数最多的元素

例如:nums = [1, 2, 3,1,4,2,1,3,7,3,3] —> 打印:3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值