Python 列表基础与常用操作详解
在 Python 中,列表(list)是最常用的数据结构之一。它是一种有序且可变的集合,允许存储重复元素,甚至可以在同一个列表中混合不同类型的对象。理解列表的创建、操作及切片机制,是掌握 Python 编程的关键一步。
创建列表
1. 创建空列表
最直观的方式是使用方括号 []:
a = []
print(type(a)) # <class 'list'>
print(a) # []
也可以使用内置函数 list():
a = list()
print(type(a)) # <class 'list'>
print(a) # []
2. 创建非空列表
初始化时直接指定元素即可,类型不限:
a = [1, 3, 2.2, 'Jinger']
print(type(a)) # <class 'list'>
print(a) # [1, 3, 2.2, 'Jinger']
操作列表
1. 新增列表元素
append 方法
向列表末尾追加单个元素,注意它只接受一个参数:
a = [1, 3.0, 2.2]
a.append('Jinger')
print(a) # [1, 3.0, 2.2, 'Jinger']
insert 方法
在指定索引位置插入元素,支持负索引(从后往前数)。如果索引超出范围,会自动追加到末尾或头部:
a = [1, 3.0, 2.2]
a.insert(1, 'Jinger')
print(a) # [1, 'Jinger', 3.0, 2.2]
# 负索引示例
a.insert(-1, 'Hello')
print(a) # [1, 'Jinger', 3.0, 'Hello', 2.2]
# 越界处理
a.insert(100, 'End')
print(a) # [..., 'End']
提示:负索引
-1代表最后一个元素,-2代表倒数第二个,以此类推。
2. 删除列表元素
pop 方法
默认删除并返回列表最后一个元素,也可指定索引删除:
a = [1, 3.0, 2.2]
a.pop() # 删除 2.2
a.pop(1) # 删除 3.0
remove 方法
根据值删除元素,仅移除第一次出现的匹配项:
a = [1, 3.0, 2.2, 3.0]
a.remove(3.0)
print(a) # [1, 2.2, 3.0] # 只删了第一个 3.0
3. 查找列表元素
in / not in 操作符
判断元素是否存在,返回布尔值:
a = [1, 3.0, 2.2]
print(3 in a) # False (注意 3 != 3.0)
print(3.0 in a) # True
index 方法
获取元素首次出现的索引:
a = [1, 3.0, 2.2]
print(a.index(2.2)) # 2
下标访问
直接通过索引读取或修改:
a = [1, 3.0, 2.2]
print(a[0]) # 1
a[0] = 10 # 修改为 10
4. 遍历列表元素
for 循环
直接遍历元素,但修改循环变量不会改变原列表内容:
a = [1, 3.0, 2.2]
for item in a:
item += 1 # 这里修改的是局部变量
print(a) # [1, 3.0, 2.2] 未变
若需修改原列表,应遍历索引:
a = [1, 3.0, 2.2]
for i in range(len(a)):
a[i] += 1
print(a) # [2, 4.0, 3.2]
while 循环
配合索引手动控制遍历过程:
a = [1, 3.0, 2.2]
i = 0
while i < len(a):
a[i] += 1
i += 1
5. 子列表提取(切片)
切片是 Python 列表最强大的功能之一,语法为 [start:stop:step]。
基本切片
左闭右开区间,即包含 start,不包含 stop:
a = [1, 3.0, 2.2, 3.0]
b = a[1:3] # [3.0, 2.2]
c = a[:2] # [1, 3.0]
d = a[1:] # [3.0, 2.2, 3.0]
e = a[:] # 复制整个列表
步长与负索引
支持负索引和步长,步长为负可实现反向切片:
a = [1, 3.1, 2.2, 3.0]
print(a[::-1]) # [3.0, 2.2, 3.1, 1] 反转
print(a[-3:-1]) # [3.0, 2.2]
print(a[::2]) # [1, 2.2] 每隔一个取一个
注意:切片操作非常安全,即使索引越界也不会报错,只会返回尽可能多的有效元素。
6. 拼接列表
使用 + 运算符
生成新列表,不修改原列表:
a = [1, 2]
b = [3, 4]
c = a + b # [1, 2, 3, 4]
使用 += 或 extend
就地修改列表,extend 通常比 += 效率更高,因为它避免了临时对象的创建:
a = [1, 2]
b = [3, 4]
a.extend(b) # a 变为 [1, 2, 3, 4]
常用接口汇总
作为面向对象语言,列表提供了丰富的内置方法:
| 方法 | 功能 |
|---|---|
append(x) | 末尾添加元素 |
insert(i, x) | 指定位置插入 |
remove(x) | 删除首次出现的 x |
pop([i]) | 删除并返回指定索引元素 |
index(x) | 返回 x 的索引 |
count(x) | 统计 x 出现次数 |
sort() | 原地排序 |
reverse() | 原地反转 |
clear() | 清空列表 |
copy() | 浅拷贝列表 |
掌握这些基础操作,就能灵活应对大多数数据处理场景。在实际开发中,建议优先使用 extend 而非 + 进行大列表合并,并注意 remove 仅删除首条匹配项的特性,避免逻辑漏洞。


