一、什么是列表?
- 定义:列表是一种有序、可变、允许重复元素的容器型数据结构。
- 特点:
- 用方括号 [] 表示;
- 元素之间用逗号 , 分隔;
- 可以包含任意类型的数据(整数、字符串、浮点数、甚至其他列表);
- 支持索引和切片操作;
- 属于可变对象(修改后 id 不变)。
a = [1, 2, 3.3, 'abcd', 5, "上山打老虎", [1, 2, 3], True]
print(type(a)) # <class 'list'>
二、列表的基本操作
1. 获取长度
使用 len() 函数获取列表中元素个数:
print(len(a)) # 输出:8
2. 索引取值(从 0 开始)
- 正向索引:a[0], a[1], …, a[n-1]
- 负向索引:a[-1](最后一个),a[-2](倒数第二个)
⚠️ 注意:索引越界会抛出 IndexError。
print(a[0]) # 1
print(a[-1]) # True
3. 通过值查找索引
使用 .index(value) 方法:
idx = a.index('abcd')
print(idx) # 3
- 可指定搜索范围:.index(value, start, end)
- 若元素不存在,抛出 ValueError
4. 遍历列表
for item in a:
print(item, type(item))
⚠️ 注意:若列表中有重复元素,a.index(item) 总是返回第一次出现的位置。
三、列表切片(Slice)
切片语法:list[start:end:step]
- 包头不包尾(左闭右开)
- start 默认为 0,end 默认为 len(list),step 默认为 1
a = [1, 2, 3.3, 'abcd', 5, "上山打老虎"]
print(a[1:4]) # [2, 3.3, 'abcd']
print(a[:3]) # [1, 2, 3.3]
print(a[3:]) # ['abcd', 5, '上山打老虎']
print(a[:]) # 完整复制(浅拷贝)
步长(Step)与反转
- 正步长:从左到右
- 负步长:从右到左(常用于反转)
print(a[::2]) # [1, 3.3, 5] # 每隔一个取一个
print(a[::-1]) # 反转整个列表
print(a[4:1:-1]) # [5, 'abcd', 3.3] # 倒序切片
✅ a[::-1] 是创建新列表;a.reverse() 是原地反转(不创建新对象)。
四、列表的增删改
✅ 添加元素
表格
| append(x) | 在末尾添加一个元素 | a.append(100) |
| extend(iterable) | 将可迭代对象中的每个元素逐个加入 | a.extend([7,8]) |
| insert(i, x) | 在索引 i 处插入元素 x | a.insert(2, 'new') |
❗ 区别:
- append([1,2]) → 添加一个列表元素
- extend([1,2]) → 添加两个独立元素
✏️ 修改元素
- 单个修改:a[0] = 'new'
- 批量修改(切片赋值):
lyst = ['大娃', '二娃', '三娃', '四娃']
lyst[2:4] = ['火娃', '水娃', '隐藏角色'] # 可替换为不同数量的元素
print(lyst) # ['大娃', '二娃', '火娃', '水娃', '隐藏角色']
❌ 删除元素
表格
| pop([i]) | 删除并返回索引 i 的元素(默认最后一个) |
| remove(x) | 删除第一个等于 x 的元素 |
| clear() | 清空列表(保留空列表对象) |
| del list[i] | 删除指定位置元素(或整个列表) |
a = [1, 2, 'abcd', 5]
a.pop() # 返回 5
a.remove('abcd') # 删除 'abcd'
a.clear() # a 变成 []
五、列表排序与反转
排序:sort()
- 原地排序(不创建新列表)
- 要求所有元素类型一致(否则报错)
- 支持 reverse=True 降序
nums = [9, 3, 6, 1]
nums.sort() # [1, 3, 6, 9]
nums.sort(reverse=True) # [9, 6, 3, 1]
strs = ['ab', 'ac', 'a', 'd']
strs.sort() # 按字典序:['a', 'ab', 'ac', 'd']
🔍 字符串排序依据 Unicode 编码(可用 ord() 查看字符编码)。
反转:reverse() vs [::-1]
表格
| list.reverse() | ✅ 是 | ❌ 否 |
| list[::-1] | ❌ 否 | ✅ 是 |
六、其他实用方法
统计元素出现次数:count()
my_list = [1, 2, 1, 3, 1]
print(my_list.count(1)) # 3
字符串与列表的转换(补充)
虽然不属于列表方法,但常配合使用:
# 列表 → 字符串(join)
words = ['Hello', 'World']
s = '-'.join(words) # 'Hello-World'
# 字符串 → 列表(split)
text = "a b c"
lst = text.split(' ') # ['a', 'b', 'c']
# 替换(replace)
new_text = text.replace(' ', '+') # "a+b+c"
七、常见误区提醒
空列表不是 False
b = [0, False, None]
print(bool(b)) # True!只要非空,就是 True
index() 对重复元素只返回第一个位
a = ['x', 'y', 'x']
print(a.index('x')) # 0,不是 2
append vs extend 混淆
- append 加“整体”
- extend 加“拆开”
切片赋值可改变列表长
a = [1, 2, 3]
a[1:2] = [10, 20, 30] # a 变成 [1, 10, 20, 30, 3]


