Python3 列表(List):一个能装任何东西的箱子
我是陈默,一个正拼命上岸的码农。
想象你有一个箱子。
这个箱子能装数字、文字、甚至另一个箱子。
而且你想往里面加东西、拿东西、排序、查找,都行。
这个箱子,就是 Python 的列表。
1. 创建列表:把东西装进箱子
列表用方括号 [] 表示,元素之间用逗号隔开。
# 数字列表scores = [85, 92, 78, 90, 67]# 字符串列表fruits = ["苹果", "香蕉", "橙子"]# 混合列表(什么类型都能装)mixed = [1, "hello", 3.14, True]# 空列表empty = []print(type(scores)) # 输出: <class 'list'>print(scores) # 输出: [85, 92, 78, 90, 67]
Python 列表最大的特点:什么都能装,不限制类型。
2. 索引:从箱子里拿东西
从 0 开始数,第一个元素是 0:
fruits = ["苹果", "香蕉", "橙子", "葡萄", "西瓜"]print(fruits[0]) # 输出: 苹果(第 1 个)print(fruits[1]) # 输出: 香蕉(第 2 个)print(fruits[4]) # 输出: 西瓜(第 5 个)
从后往前数,用负数:
fruits = ["苹果", "香蕉", "橙子", "葡萄", "西瓜"]print(fruits[-1]) # 输出: 西瓜(倒数第 1 个)print(fruits[-2]) # 输出: 葡萄(倒数第 2 个)
索引超出范围会报错:
fruits = ["苹果", "香蕉", "橙子"]print(fruits[5]) # 报错!IndexError: list index out of range
3. 切片:从箱子里拿一批东西
和字符串切片一样,用 [开始:结束],不包含结束位置:
fruits = ["苹果", "香蕉", "橙子", "葡萄", "西瓜"]print(fruits[1:3]) # 输出: ['香蕉', '橙子']print(fruits[:3]) # 输出: ['苹果', '香蕉', '橙子'](从头开始)print(fruits[2:]) # 输出: ['橙子', '葡萄', '西瓜'](到末尾)print(fruits[:]) # 输出: ['苹果', '香蕉', '橙子', '葡萄', '西瓜'](复制一份)
还可以加步长:
nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]print(nums[::2]) # 输出: [0, 2, 4, 6, 8](隔一个取一个)print(nums[1::2]) # 输出: [1, 3, 5, 7, 9](从第2个开始,隔一个取一个)print(nums[::-1]) # 输出: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0](反转)
4. 修改列表:往箱子里加、删、改
修改元素
直接通过索引赋值:
fruits = ["苹果", "香蕉", "橙子"]fruits[1] = "芒果"print(fruits) # 输出: ['苹果', '芒果', '橙子']
添加元素
fruits = ["苹果", "香蕉"]# append():在末尾加一个fruits.append("橙子")print(fruits) # 输出: ['苹果', '香蕉', '橙子']# insert():在指定位置插入fruits.insert(1, "芒果")print(fruits) # 输出: ['苹果', '芒果', '香蕉', '橙子']# extend():把另一个列表的所有元素加进来more = ["葡萄", "西瓜"]fruits.extend(more)print(fruits) # 输出: ['苹果', '芒果', '香蕉', '橙子', '葡萄', '西瓜']
append 和 extend 的区别:
a = [1, 2, 3]b = [1, 2, 3]a.append([4, 5])b.extend([4, 5])print(a) # 输出: [1, 2, 3, [4, 5]](把整个列表当做一个元素)print(b) # 输出: [1, 2, 3, 4, 5](把元素逐个加进来)
删除元素
fruits = ["苹果", "香蕉", "橙子", "葡萄", "香蕉"]# remove():删除第一个匹配的元素fruits.remove("香蕉")print(fruits) # 输出: ['苹果', '橙子', '葡萄', '香蕉']# pop():删除指定位置的元素(默认删最后一个)fruits.pop() # 删除最后一个print(fruits) # 输出: ['苹果', '橙子', '葡萄']fruits.pop(0) # 删除第 1 个print(fruits) # 输出: ['橙子', '葡萄']# del:直接删除指定位置del fruits[0]print(fruits) # 输出: ['葡萄']
什么时候用哪个?
5. 列表常用操作
排序
scores = [85, 92, 78, 90, 67]# sorted():返回新列表,不改变原列表print(sorted(scores)) # 输出: [67, 78, 85, 90, 92]print(sorted(scores, reverse=True)) # 输出: [92, 90, 85, 78, 67](降序)print(scores) # 输出: [85, 92, 78, 90, 67](原列表没变)# sort():直接修改原列表scores.sort()print(scores) # 输出: [67, 78, 85, 90, 92]
sorted() 和 sort() 的区别:一个不改原列表,一个改。
反转
fruits = ["苹果", "香蕉", "橙子"]fruits.reverse()print(fruits) # 输出: ['橙子', '香蕉', '苹果']
获取长度
fruits = ["苹果", "香蕉", "橙子", "葡萄"]print(len(fruits)) # 输出: 4
统计和查找
nums = [1, 3, 5, 3, 7, 3, 9]print(nums.count(3)) # 输出: 3(3 出现了 3 次)print(nums.index(7)) # 输出: 4(7 第一次出现的位置)print(5in nums) # 输出: True(5 在列表里)print(2in nums) # 输出: False(2 不在列表里)
6. 列表推导式:一行代码创建列表
这是 Python 最优雅的特性之一。
传统写法:
# 把 1-10 的平方放进列表squares = []for i in range(1, 11): squares.append(i ** 2)print(squares) # 输出: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
列表推导式——一行搞定:
squares = [i ** 2for i in range(1, 11)]print(squares) # 输出: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
还能加条件:
# 只要偶数的平方even_squares = [i ** 2for i in range(1, 11) if i % 2 == 0]print(even_squares) # 输出: [4, 16, 36, 64, 100]
# 把成绩列表里及格的分数挑出来scores = [45, 67, 82, 55, 91, 38, 73]passed = [s for s in scores if s >= 60]print(passed) # 输出: [67, 82, 91, 73]
一开始看不懂没关系。多写几遍就习惯了。
7. 遍历列表:一个一个处理
基本遍历
fruits = ["苹果", "香蕉", "橙子"]for fruit in fruits: print(f"我喜欢{fruit}")# 输出:# 我喜欢苹果# 我喜欢香蕉# 我喜欢橙子
带索引遍历
fruits = ["苹果", "香蕉", "橙子"]for index, fruit in enumerate(fruits): print(f"第{index + 1}个:{fruit}")# 输出:# 第1个:苹果# 第2个:香蕉# 第3个:橙子
enumerate() 同时给你索引和值,比手动数索引方便多了。
8. 实战:用列表做个成绩分析工具
scores = [85, 92, 78, 90, 67, 55, 98, 73, 82, 61]# 基本统计print(f"班级人数:{len(scores)}")print(f"最高分:{max(scores)}")print(f"最低分:{min(scores)}")print(f"平均分:{sum(scores) / len(scores):.1f}")# 分数段统计excellent = [s for s in scores if s >= 90]passed = [s for s in scores if s >= 60]failed = [s for s in scores if s < 60]print(f"优秀(≥90):{len(excellent)}人")print(f"及格(≥60):{len(passed)}人")print(f"不及格(<60):{len(failed)}人")# 输出:# 班级人数:10# 最高分:98# 最低分:55# 平均分:78.1# 优秀(≥90):3人# 及格(≥60):8人# 不及格(<60):2人
你看,列表加上循环和条件判断,就能做出实用的工具。
最后
列表是 Python 里用得最多的数据结构,没有之一。
记住三件事:
- 索引从 0 开始,
append() 加元素,pop() 删元素 sorted() 不改原列表,sort() 改原列表
我的建议:
把成绩分析那段代码跑一遍。然后试试改成你自己的场景——比如分析你的每月支出、统计你的运动数据。
编程的乐趣在于:用简单的工具,解决你自己的问题。
今天就到这里。
我是陈默,我们下期再见。
如果你觉得这篇文章有帮助,欢迎关注我。我会持续分享 Python 学习的干货。