重要注意事项
1. 避免无限循环(while循环特别需要注意)
# 危险:缺少退出条件的无限循环
# while True:
# print("这将会永远运行!")
# 安全:确保有退出机制
count = 0
while True:
print(count)
count += 1
if count >= 5:
break
2. 不要在迭代过程中修改序列
# 错误示范:在迭代时修改列表
numbers = [1, 2, 3, 4, 5]
for num in numbers:
if num % 2 == 0:
numbers.remove(num) # 这会导致不可预期的行为
# 正确做法:创建副本或使用列表推导式
numbers = [1, 2, 3, 4, 5]
numbers_copy = numbers.copy()
for num in numbers_copy:
if num % 2 == 0:
numbers.remove(num)
# 或者更好的方式
numbers = [num for num in numbers if num % 2 != 0]
3. 使用 enumerate() 获取索引和值
fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits):
print(f"索引 {index}: {fruit}")
# 可以指定起始索引
for index, fruit in enumerate(fruits, start=1):
print(f"第{index}个水果: {fruit}")
4. 使用 zip() 同时遍历多个序列
names = ["Alice", "Bob", "Charlie"]
scores = [85, 92, 78]
for name, score in zip(names, scores):
print(f"{name}: {score}分")
5. 循环性能考虑
# 避免在循环内进行重复计算
# 不佳的性能
results = []
for i in range(10000):
results.append(len(some_long_string) * complex_calculation(i))
# 更好的性能
str_len = len(some_long_string)
results = []
for i in range(10000):
results.append(str_len * complex_calculation(i))
嵌套循环
# 嵌套循环示例
for i in range(3):
for j in range(2):
print(f"i={i}, j={j}")
# 使用product简化多层嵌套(需要itertools)
from itertools import product
for i, j in product(range(3), range(2)):
print(f"i={i}, j={j}")
调试技巧
1. 使用打印语句调试
numbers = [1, 2, 3, 4, 5]
for i, num in enumerate(numbers):
print(f"迭代 {i}: num = {num}") # 调试信息
# 处理逻辑
2. 使用断言验证假设
- 选择正确的循环类型:
- 已知迭代次数:使用 for 循环
- 条件控制迭代:使用 while 循环
- 保持循环简洁:复杂的逻辑应该提取为函数
- 使用生成器表达式处理大数据:
# 对于大数据集,使用生成器节省内存
large_sum = sum(x * x for x in range(1000000))
- 考虑使用内置函数:
# 代替手动循环
numbers = [1, 2, 3, 4, 5]
total = sum(numbers)
maximum = max(numbers)
minimum = min(numbers)
- 编写清晰的退出条件:确保循环能够正常终止
学习提示:
- for循环适用于已知循环次数的情况
- while循环适用于未知循环次数,需要条件控制的情况
- break用于完全退出循环
- continue用于跳过当前循环的剩余代码,进入下一次循环
- 注意避免无限循环,确保循环条件最终会变为False
本文暂时没有评论,来添加一个吧(●'◡'●)