Python 基础 - 第七节


📋 本节要点

知识点 说明
list 列表,一种有序的可变数据结构
索引 从 0 开始的编号,用于访问元素
append() 在列表末尾添加元素
insert() 在指定位置插入元素
extend() 合并另一个列表
pop() 删除指定位置的元素并返回
remove() 删除第一个匹配的值
del 删除元素或整个列表
in / not in 判断元素是否存在
切片 截取列表的一部分
sort() 列表排序
reverse() 列表反转
enumerate() 同时获取索引和值
count() 统计元素出现次数
index() 查找元素索引

1. 列表的创建与访问

列表用 [] 包裹,元素之间用逗号分隔,可存储不同类型的数据。

# 创建列表
subjects = ["语文", "数学", "英语"]
mixed = [1, "hello", 3.14, True]  # 不同类型
empty = []                         # 空列表

1.1 索引访问

列表中的每个元素都有一个索引,从 0 开始编号。

print(subjects[0])  # 语文
print(subjects[1])  # 数学
print(subjects[2])  # 英语
print(subjects[-1]) # 英语(负索引从右往左)
print(subjects[-2]) # 数学

注意:索引从 0 开始,subjects[0] 是第一个元素。负索引 -1 表示最后一个元素。

1.2 in / not in 判断元素是否存在

fruits = ["苹果", "香蕉", "橘子"]
print("苹果" in fruits)    # True
print("西瓜" in fruits)    # False
print("西瓜" not in fruits) # True

2. 列表的增删改

2.1 增 - append() 末尾添加

append() 在列表末尾添加一个元素。

subjects.append("生物")
print(subjects)

运行结果:

['语文', '数学', '英语', '生物']

2.2 增 - insert() 指定位置插入

insert(索引, 值) 在指定位置插入元素,原位置及后面元素自动后移。

subjects.insert(1, "物理")  # 在索引 1 处插入
print(subjects)

运行结果:

['语文', '物理', '数学', '英语', '生物']

2.3 增 - extend() 合并列表

extend() 将另一个列表的所有元素添加到当前列表末尾。

a = [1, 2, 3]
b = [4, 5, 6]
a.extend(b)
print(a)  # [1, 2, 3, 4, 5, 6]

运行结果:

[1, 2, 3, 4, 5, 6]

2.4 删 - pop() 删除并返回

pop(索引) 删除指定位置的元素,并返回该元素。默认删除最后一个。

item = subjects.pop()    # 删除最后一个
print(item)               # 生物
item = subjects.pop(1)    # 删除索引 1 的元素
print(item)               # 物理
print(subjects)           # ['语文', '数学', '英语']

2.5 删 - remove() 删除指定值

remove(值) 删除第一个匹配的元素,不知道索引时使用。

scores = [85, 92, 78, 92, 60]
scores.remove(92)   # 删除第一个 92
print(scores)        # [85, 78, 92, 60]

2.6 删 - del 语句

del 可以删除指定索引的元素,也可以删除整个列表。

nums = [10, 20, 30, 40, 50]
del nums[1]       # 删除索引 1 的元素(20)
print(nums)       # [10, 30, 40, 50]

del nums          # 删除整个列表(之后 nums 不再存在)

2.7 改 - 直接赋值修改

通过索引直接赋值可以修改指定位置的元素。

nums = [10, 20, 30, 40, 50]
nums[1] = 99     # 把索引 1 的元素改为 99
print(nums)      # [10, 99, 30, 40, 50]

3. 切片

切片用于获取列表的一部分(子列表),语法为 列表[起始:结束:步长],左闭右开(包含起始,不包含结束)。

3.1 基本切片 [start:end]

grade = ["张三", 18, "李四", 20, "王五", "赵六"]

print(grade[0:2])   # ['张三', 18](索引 0 到 1)
print(grade[4:])     # ['王五', '赵六'](从索引 4 到末尾)
print(grade[:2])    # ['张三', 18](从开头到索引 1)
print(grade[:])     # 复制整个列表

3.2 负索引切片

print(grade[-3:])    # ['李四', 20, '王五', '赵六'](后 3 个到末尾)
print(grade[:-1])    # ['张三', 18, '李四', 20, '王五'](去掉最后一个)
print(grade[-3:-1])  # ['李四', 20, '王五'](负索引区间)

3.3 步长切片 [start:end:step]

步长表示每几个元素取一个,默认为 1。

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](从索引 1 开始每隔一个)
print(nums[::-1])    # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0](反转列表)

3.4 切片复制列表

original = [1, 2, 3]
copy_list = original[:]   # 复制整个列表
copy_list[0] = 99
print(original)  # [1, 2, 3](原列表不受影响)
print(copy_list) # [99, 2, 3]

4. 列表方法

4.1 sort() - 排序

age = [67, 12, 34, 89, 3, 23]
age.sort()              # 升序排序
print(age)              # [3, 12, 23, 34, 67, 89]

age.sort(reverse=True)  # 降序排序
print(age)              # [89, 67, 34, 23, 12, 3]

运行结果:

[3, 12, 23, 34, 67, 89]
[89, 67, 34, 23, 12, 3]

4.2 reverse() - 反转

age.reverse()
print(age)              # [3, 12, 23, 34, 67, 89](又变回升序)

运行结果:

[3, 12, 23, 34, 67, 89]

4.3 enumerate() - 同时获取索引和值

li = [5, 6, 9, "test", 3.14]
for index, value in enumerate(li):
    print(f"索引 {index} → {value}")

运行结果:

索引 0 → 5
索引 1 → 6
索引 2 → 9
索引 3 → test
索引 4 → 3.14

4.4 count() - 统计元素出现次数

nums = [1, 2, 2, 3, 2, 4, 2]
print(nums.count(2))  # 4(2 出现了 4 次)
print(nums.count(5))  # 0(5 没有出现过)

运行结果:

4
0

4.5 index() - 查找元素索引

fruits = ["苹果", "香蕉", "橘子", "香蕉"]
print(fruits.index("香蕉"))    # 1(第一个匹配的索引)
print(fruits.index("橘子"))    # 2

运行结果:

1
2

下一节预告:字符串、元组、集合与字典