Python 列表完全入门:创建、遍历与常用操作
大家好,如果说字符串是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) # False5. 排序与反转
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()
增删改:append、extend、insert、pop、remove、索引赋值
查找排序:index、count、sort、reverse、sorted
复制注意:区分引用赋值和真正的拷贝
列表用得好,代码写起来会顺手很多。它和字符串、字典、元组一起构成了Python数据处理的基础,每一块都需要多练手。
如果觉得有帮助,可以收藏备用。下一篇我会接着讲字典和元组,欢迎继续关注。