🐍
Python3 列表知识点大全
专为编程小白设计 – 通俗易懂、深入浅出的列表知识汇总
什么是列表?
列表(List)是Python中最基本也最常用的数据结构,你可以把它想象成一个”容器”,里面可以存放各种各样不同类型的数据。
👉 列表是有序的(元素有固定位置)
👉 列表的元素可以重复
👉 列表可以随时添加或删除元素
创建一个列表
# 创建一个空列表
empty_list = []
# 创建带元素的列表
fruits = [“苹果”, “香蕉”, “橙子”, “芒果”]
# 列表可以包含不同类型的数据
mixed_list = [1, “文本”, True, 3.14, [5, 6, 7]]
empty_list = []
# 创建带元素的列表
fruits = [“苹果”, “香蕉”, “橙子”, “芒果”]
# 列表可以包含不同类型的数据
mixed_list = [1, “文本”, True, 3.14, [5, 6, 7]]
💡 提示:列表用方括号[]表示,元素之间用逗号分隔。
访问列表元素
列表中的每个元素都有一个位置索引(就像排队时的位置号),索引从0开始(不是1!)
索引示例
animals = [“🐶”, “🐱”, “🐭”, “🦊”, “🐻”]
# 获取第一个元素
first = animals[0] # 结果是 🐶
# 获取最后一个元素
last = animals[-1] # 结果是 🐻(负数表示从后往前)
# 获取第三个元素
third = animals[2] # 结果是 🐭
# 获取第一个元素
first = animals[0] # 结果是 🐶
# 获取最后一个元素
last = animals[-1] # 结果是 🐻(负数表示从后往前)
# 获取第三个元素
third = animals[2] # 结果是 🐭
切片操作
切片就像切面包,可以从列表中取出一部分
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 获取索引1到3的元素(不包括4)
part = numbers[1:4] # 结果是 [1, 2, 3]
# 获取前三个元素
first_three = numbers[:3] # [0, 1, 2]
# 获取最后三个元素
last_three = numbers[-3:] # [7, 8, 9]
# 每隔2个取一个元素
step = numbers[::2] # [0, 2, 4, 6, 8]
# 获取索引1到3的元素(不包括4)
part = numbers[1:4] # 结果是 [1, 2, 3]
# 获取前三个元素
first_three = numbers[:3] # [0, 1, 2]
# 获取最后三个元素
last_three = numbers[-3:] # [7, 8, 9]
# 每隔2个取一个元素
step = numbers[::2] # [0, 2, 4, 6, 8]
修改列表
列表是可变的(可以改变),不同于字符串和元组
修改元素
colors = [“红”, “绿”, “蓝”]
# 修改第二个元素
colors[1] = “黄”
# 现在列表变为 [“红”, “黄”, “蓝”]
# 修改第二个元素
colors[1] = “黄”
# 现在列表变为 [“红”, “黄”, “蓝”]
添加元素
# 在末尾添加一个元素
colors.append(“紫”) # [“红”, “黄”, “蓝”, “紫”]
# 在特定位置插入元素
colors.insert(1, “橙”) # 索引1位置插入 [“红”, “橙”, “黄”, “蓝”, “紫”]
colors.append(“紫”) # [“红”, “黄”, “蓝”, “紫”]
# 在特定位置插入元素
colors.insert(1, “橙”) # 索引1位置插入 [“红”, “橙”, “黄”, “蓝”, “紫”]
扩展列表
more_colors = [“粉”, “青”]
colors.extend(more_colors) # 列表变为 [“红”, “橙”, “黄”, “蓝”, “紫”, “粉”, “青”]
# 也可以使用 + 运算符
new_list = colors + [“黑”, “白”]
colors.extend(more_colors) # 列表变为 [“红”, “橙”, “黄”, “蓝”, “紫”, “粉”, “青”]
# 也可以使用 + 运算符
new_list = colors + [“黑”, “白”]
删除元素
从列表中移除元素有几种不同方法
根据位置删除
fruits = [“苹果”, “香蕉”, “橙子”, “芒果”]
# 删除指定位置的元素
del fruits[1] # 删除索引为1的元素(香蕉)
# 删除末尾元素并返回被删除的元素
removed_fruit = fruits.pop() # 删除”芒果”并返回它
# 删除指定位置元素并返回
removed = fruits.pop(0) # 删除第一个元素”苹果”
# 删除指定位置的元素
del fruits[1] # 删除索引为1的元素(香蕉)
# 删除末尾元素并返回被删除的元素
removed_fruit = fruits.pop() # 删除”芒果”并返回它
# 删除指定位置元素并返回
removed = fruits.pop(0) # 删除第一个元素”苹果”
根据值删除
numbers = [1, 2, 3, 2, 4, 2]
# 删除第一个值为2的元素
numbers.remove(2) # 删除第一个2,列表变为[1, 3, 2, 4, 2]
# 删除第一个值为2的元素
numbers.remove(2) # 删除第一个2,列表变为[1, 3, 2, 4, 2]
⚠️ 注意:如果删除不存在的值会报错!可以先检查元素是否存在:
if “西瓜” in fruits:
fruits.remove(“西瓜”)
fruits.remove(“西瓜”)
列表常用操作
获取列表长度
fruits = [“苹果”, “香蕉”, “橙子”]
length = len(fruits) # 结果为3
length = len(fruits) # 结果为3
检查元素是否存在
if “苹果” in fruits:
print(“有苹果!”)
if “西瓜” not in fruits:
print(“没有西瓜!”)
print(“有苹果!”)
if “西瓜” not in fruits:
print(“没有西瓜!”)
列表排序
nums = [3, 1, 4, 1, 5, 9, 2]
# 永久性排序(改变原列表)
nums.sort() # [1, 1, 2, 3, 4, 5, 9]
# 降序排序
nums.sort(reverse=True) # [9, 5, 4, 3, 2, 1, 1]
# 临时排序(不改变原列表)
sorted_nums = sorted(nums) # 返回新排序列表
# 永久性排序(改变原列表)
nums.sort() # [1, 1, 2, 3, 4, 5, 9]
# 降序排序
nums.sort(reverse=True) # [9, 5, 4, 3, 2, 1, 1]
# 临时排序(不改变原列表)
sorted_nums = sorted(nums) # 返回新排序列表
反转列表
letters = [‘a’, ‘b’, ‘c’, ‘d’]
letters.reverse() # 列表变为 [‘d’, ‘c’, ‘b’, ‘a’]
letters.reverse() # 列表变为 [‘d’, ‘c’, ‘b’, ‘a’]
列表复制
列表复制时需要注意,直接赋值只是创建了一个引用(别名)
错误做法
list1 = [1, 2, 3]
list2 = list1 # 这只是创建了一个引用
list2[0] = 99
print(list1) # [99, 2, 3] 原列表也被改变了!
list2 = list1 # 这只是创建了一个引用
list2[0] = 99
print(list1) # [99, 2, 3] 原列表也被改变了!
正确复制方法
# 方法1:使用copy()方法
list2 = list1.copy()
# 方法2:使用切片
list3 = list1[:]
# 方法3:使用list()构造函数
list4 = list(list1)
list2[0] = 100
print(list1) # [1, 2, 3] 原列表不变
list2 = list1.copy()
# 方法2:使用切片
list3 = list1[:]
# 方法3:使用list()构造函数
list4 = list(list1)
list2[0] = 100
print(list1) # [1, 2, 3] 原列表不变
📌 重要:当列表包含子列表时,上面的方法都是浅拷贝,子列表仍是引用。需要使用copy模块的deepcopy()进行深拷贝。
遍历列表
通常使用for循环来遍历列表中的每个元素
基本遍历
fruits = [“苹果”, “香蕉”, “橙子”]
for fruit in fruits:
print(f”我喜欢吃{fruit}”)
for fruit in fruits:
print(f”我喜欢吃{fruit}”)
同时获取索引和值
for index, fruit in enumerate(fruits):
print(f”索引 {index} 处的水果是 {fruit}”)
print(f”索引 {index} 处的水果是 {fruit}”)
列表推导式
列表推导式是Python的精华,可以快速生成列表
# 创建一个包含1-10平方的列表
squares = [x**2 for x in range(1, 11)]
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# 带条件的列表推导式
even_squares = [x**2 for x in range(1, 11) if x % 2 == 0]
# [4, 16, 36, 64, 100]
# 转换元素类型
nums = [1, 2, 3, 4]
str_nums = [str(num) for num in nums] # [‘1′,’2′,’3′,’4’]
squares = [x**2 for x in range(1, 11)]
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# 带条件的列表推导式
even_squares = [x**2 for x in range(1, 11) if x % 2 == 0]
# [4, 16, 36, 64, 100]
# 转换元素类型
nums = [1, 2, 3, 4]
str_nums = [str(num) for num in nums] # [‘1′,’2′,’3′,’4’]
列表常用方法总结
方法 | 描述 | 示例 |
---|---|---|
append() | 末尾添加元素 | list.append(x) |
extend() | 扩展列表 | list.extend([x,y,z]) |
insert() | 插入元素 | list.insert(位置, 元素) |
remove() | 删除指定元素 | list.remove(x) |
pop() | 删除并返回元素 | list.pop(位置) |
clear() | 清空列表 | list.clear() |
index() | 查找元素位置 | list.index(x) |
count() | 统计元素出现次数 | list.count(x) |
sort() | 排序 | list.sort() |
reverse() | 反转列表 | list.reverse() |
copy() | 复制列表 | new_list = list.copy() |
💡 提示:使用 dir(list) 可以查看列表的所有可用方法!