Python 循环与列表详解:流程控制与核心数据结构
在 Python 编程中,循环和列表是基础中的基础。循环赋予程序重复执行的能力,列表则是日常开发中使用频率最高的容器类型。本文将两部分内容整合在一起,系统梳理 while 与 for 循环的用法,以及列表的概念、操作、深浅拷贝和内置方法。
一、循环语句:重复执行的逻辑
1. while 循环:基于条件的循环
当不确定具体循环次数,但知道何时停止时,使用 while 最为合适。
语法:
python
while 条件:
语句块
示例:打印 1 到 5
python
i = 1
while i <= 5:
print(i)
i += 1 # 改变条件,避免死循环
2. for 循环:遍历序列的循环
当需要遍历一个集合中的每个元素,或循环次数已知时,使用 for 更为简洁。
语法:
python
for 变量 in 可迭代对象:
语句块
示例:遍历列表
python
fruits = ["苹果", "香蕉", "橘子"]
for fruit in fruits:
print(fruit)
示例:结合 range() 实现固定次数循环
python
for i in range(1, 6): # 1,2,3,4,5
print(i)
3. break 与 continue:循环流程控制
break 和 continue 在 while 和 for 中均能使用,用于实现更灵活的控制逻辑。
- break:立即终止整个循环,不再执行后续迭代。
- continue:跳过本次循环中剩余的代码,直接进入下一次迭代。
示例:break
python
for i in range(1, 10):
if i == 5:
break
print(i)
# 输出:1 2 3 4
示例:continue
python
for i in range(1, 6):
if i == 3:
continue
print(i)
# 输出:1 2 4 5
4. while 与 for 对比
| 特性 | while 循环 | for 循环 |
|---|---|---|
| 适用场景 | 次数不定,依赖条件 | 遍历序列或次数明确 |
| 常用搭配 | 条件变量、状态标志 | range()、列表、字符串等 |
| 优点 | 灵活可处理复杂退出条件 | 简洁易读,防止死循环 |
二、列表:最常用的可变序列
列表是一种有序、可变、允许重复元素的数据结构,可以容纳任意类型的数据,是 Python 中使用频率最高的容器之一。
1. 列表的基本操作
python
l = [1, 2, 3, 4]
索引
通过下标访问元素,索引从 0 开始,支持负索引。
python
print(l[0]) # 1
print(l[-1]) # 4
切片
利用 [起始:结束:步长] 获取子列表,也可用于修改部分元素。
python
# 查询切片
print(l[0:3:2]) # [1, 3](索引0到2,步长2)
# 通过切片修改
l[0:2] = [10, 20] # l 变为 [10, 20, 3, 4]
成员检查
使用 in / not in 判断元素是否在列表中。
python
print(5 in l) # False
print(2 in l) # True
拼接与重复
列表可通过 + 拼接,通过 * 重复。
python
l1 = [1, 2, 3]
l2 = [4, 5, 6]
print(l1 + l2) # [1, 2, 3, 4, 5, 6]
遍历
python
for i in l:
print(i)
计算长度
python
print(len(l)) # 4
2. 列表的可变性
列表是可变对象,修改列表元素不会创建新对象,而是在原地址上直接修改。
python
a = [1, 2, 3]
print(id(a)) # 初始地址
a[0] = 10
print(id(a)) # 地址不变
如果使用赋值语句 b = a,则两个变量会指向同一个列表对象,修改其中一个会影响另一个。
3. 列表的深浅拷贝
当需要复制列表又不希望与原始数据互相干扰时,必须理解拷贝机制。
浅拷贝
浅拷贝会创建一个新的列表对象,但内部的元素仍然与原始列表共享引用。修改不可变元素无影响,但修改可变子对象时,双方都会受影响。
常见浅拷贝方式:list.copy()、l[:]、copy.copy()。
python
old = [1, 2, [3, 4]]
new = old.copy()
new[0] = 10 # 只影响新列表
new[2][0] = 30 # 内部列表被共享,会影响原列表
print(old) # [1, 2, [30, 4]]
深拷贝
深拷贝会递归复制所有层级的对象,新旧列表完全独立,互不影响。需要使用 copy.deepcopy()。
python
import copy
old = [1, 2, [3, 4]]
new = copy.deepcopy(old)
new[2][0] = 30
print(old) # [1, 2, [3, 4]] 保持原样
使用建议: 简单列表中无嵌套对象时,浅拷贝足够;列表中若包含列表、字典等可变对象,应视情况使用深拷贝。
4. 列表常用内置方法
| 方法 | 作用 | 示例 |
|---|---|---|
remove(x) |
删除第一个值为 x 的元素 | l.remove(2) |
clear() |
清空整个列表 | l.clear() |
sort() |
原地升序排序 | l.sort() |
reverse() |
原地反转 | l.reverse() |
count(x) |
统计元素 x 出现的次数 | l.count(3) |
index(x) |
返回元素 x 首次出现的索引 | l.index(3) |
示例:
python
data = [3, 1, 2, 3, 4]
data.sort() # [1, 2, 3, 3, 4]
data.reverse() # [4, 3, 3, 2, 1]
print(data.count(3)) # 2
print(data.index(4)) # 0
data.remove(3) # 删除第一个3,列表变为 [4, 3, 2, 1]
data.clear() # []
小结
本文合并了 Python 循环和列表两大基础主题,覆盖了:
while与for循环的语法和适用场景break和continue的通用控制逻辑- 列表的概念、索引、切片、遍历等基本操作
- 可变对象特性及深浅拷贝的区别
- 最常用的列表内置方法
掌握好循环与列表,就具备了处理批量数据和控制程序逻辑的核心能力。建议在练习中将两者灵活结合,为后续学习函数、字典和组合数据结构打好基础。