大家好,如果说字符串是Python中的"文本管家",那列表就是"万能容器"。它能放数字、放字符串、放嵌套的列表,甚至混着放不同类型的数据。几乎所有需要"批量处理"数据的场景,都绕不开列表。

这篇文章我们从三个层面来梳理列表:如何创建如何遍历常用的操作方法有哪些。代码示例为主,理论为辅,适合边看边敲。


一、列表是什么

列表是Python内置的可变(mutable) 序列类型,用方括号 [] 表示,元素之间用逗号隔开。

# 常见列表
numbers = [1, 2, 3, 4, 5]
names = ["张三", "李四", "王五"]
mixed = [1, "hello", 3.14, [1, 2]]  # 元素类型可以不同

# 空列表
empty = []

列表有几个核心特征:

有序:元素按插入顺序存储,可以通过索引访问

可变:可以增删改元素,不会创建新对象

可容纳任意类型:整数、浮点数、字符串、布尔值,甚至是另一个列表


二、创建列表的几种方式

除了直接用 [],还有几种常见的创建方式:

1. list() 构造方法

# 从其他可迭代对象转换
s = list("abc")      # ['a', 'b', 'c']
t = list((1, 2, 3))  # [1, 2, 3]  元组转列表

2. 列表推导式

列表推导式是Python的特色语法,用一行代码生成列表:

# 生成 1 到 10 的平方数
squares = [x**2 for x in range(1, 11)]
print(squares)  # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

# 带条件的推导式
evens = [x for x in range(20) if x % 2 == 0]
print(evens)  # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

列表推导式比手动写 for 循环更简洁,且执行效率更高。


三、遍历列表

遍历是操作列表最基础的动作,Python提供了多种方式。

1. for 循环直接遍历元素

fruits = ["苹果", "香蕉", "橘子"]

for fruit in fruits:
    print(fruit)

这种方式最常用,适合只需要元素值、不需要索引的场景。

2. 通过索引遍历

如果需要同时知道元素的位置,可以用 range 配合 len()

fruits = ["苹果", "香蕉", "橘子"]

for i in range(len(fruits)):
    print(f"第{i+1}个水果是:{fruits[i]}")

3. enumerate() 同时获取索引和值

这是更推荐的写法,既简洁又清晰:

fruits = ["苹果", "香蕉", "橘子"]

for index, fruit in enumerate(fruits):
    print(f"索引{index}:{fruit}")

enumerate() 默认从0开始,也可以指定起始值:

for index, fruit in enumerate(fruits, start=1):
    print(f"第{index}个:{fruit}")

四、列表的常用操作

列表之所以强大,很大程度上得益于它丰富的方法。这里按功能分类整理。

1. 增加元素

方法说明示例
append(x)在列表末尾添加一个元素lst.append(5)
insert(i, x)在索引 i 处插入元素lst.insert(0, 10)
extend(iterable)将另一个可迭代对象的元素逐个追加到末尾lst.extend([6,7])
nums = [1, 2, 3]
nums.append(4)        # [1, 2, 3, 4]
nums.insert(0, 0)     # [0, 1, 2, 3, 4]
nums.extend([5, 6])   # [0, 1, 2, 3, 4, 5, 6]

注意append 和 extend 的区别很关键。

lst = [1, 2]
lst.append([3, 4])   # [1, 2, [3, 4]]  整个列表作为一个元素
lst.extend([5, 6])   # [1, 2, [3, 4], 5, 6]  逐个添加元素

2. 删除元素

方法说明
pop(i)删除索引 i 处的元素并返回它,不传参数则删除最后一个
remove(x)删除第一个值为 x 的元素
clear()清空列表所有元素
del 语句删除指定索引或切片
nums = [10, 20, 30, 40, 50]

last = nums.pop()     # 50,nums变为 [10, 20, 30, 40]
first = nums.pop(0)   # 10,nums变为 [20, 30, 40]
nums.remove(30)       # nums变为 [20, 40]

del nums[0]           # nums变为 [40]

3. 修改元素

修改列表元素直接通过索引赋值即可:

nums = [1, 2, 3, 4]
nums[2] = 99          # [1, 2, 99, 4]

# 切片赋值可以同时修改多个
nums[1:3] = [8, 9]    # [1, 8, 9, 4]

4. 查找与统计

方法说明
index(x)返回第一个值为 x 的索引,找不到会报错
count(x)统计值为 x 的元素个数
in 操作符判断元素是否存在于列表中
nums = [1, 2, 3, 2, 4, 2]

print(nums.index(3))   # 2
print(nums.count(2))   # 3
print(5 in nums)       # False

5. 排序与反转

nums = [3, 1, 4, 1, 5]

# 排序(永久改变)
nums.sort()            # [1, 1, 3, 4, 5]
nums.sort(reverse=True) # [5, 4, 3, 1, 1]

# 反转
nums.reverse()         # [1, 1, 3, 4, 5]

# 不改变原列表,返回新列表(sorted 是内置函数)
new_nums = sorted(nums)  # 不会修改原列表

五、列表的复制:一个常见坑

由于列表是可变类型,直接赋值只是复制了引用,而不是复制数据:

a = [1, 2, 3]
b = a
b.append(4)
print(a)  # [1, 2, 3, 4]  原列表也被改了
如果需要真正的复制,可以用以下方式:

a = [1, 2, 3]

# 方法一:切片
b = a[:]

# 方法二:list() 构造
b = list(a)

# 方法三:copy() 方法
b = a.copy()

如果列表里还嵌套了列表(多层结构),需要用 copy.deepcopy() 进行深拷贝,这个后续文章会单独讲。


六、列表与字符串的互转

列表和字符串在实际开发中经常互相转换:

# 字符串 → 列表
s = "a,b,c,d"
lst = s.split(",")   # ['a', 'b', 'c', 'd']

# 列表 → 字符串
lst = ['a', 'b', 'c', 'd']
s = ",".join(lst)    # 'a,b,c,d'

这个组合在解析CSV文件、处理日志时非常常用。


七、总结

列表是Python中最基础也最重要的数据结构,掌握以下内容就能覆盖绝大多数使用场景:

创建[]list()、列表推导式

遍历for 直接遍历、range+索引、enumerate()

增删改appendextendinsertpopremove、索引赋值

查找排序indexcountsortreversesorted

复制注意:区分引用赋值和真正的拷贝

列表用得好,代码写起来会顺手很多。它和字符串、字典、元组一起构成了Python数据处理的基础,每一块都需要多练手。

如果觉得有帮助,可以收藏备用。下一篇我会接着讲字典和元组,欢迎继续关注。

更多推荐