【Python进阶】详解循环与列表推导式:让你的代码更Pythonic!

# 【Python进阶】详解循环与列表推导式:让你的代码更Pythonic!


## 写在前面
循环是编程中最重要的控制结构之一,而Python的**列表推导式**更是将简洁优雅发挥到极致。本文将带你全面掌握:
- 三大循环结构(for/while/range)
- 列表推导式的5种高阶用法
- 如何避免常见陷阱
- 写出更Pythonic的代码

文末附【思维导图】+【练习题】,建议收藏⭐

---

## 一、For循环:遍历的艺术
### 1.1 基础语法
```python
planets = ['Mercury', 'Venus', 'Earth', 'Mars']
for planet in planets:
    print(planet, end=' ')  
# 输出:Mercury Venus Earth Mars

1.2 三大特性

特性说明示例
自动迭代无需手动管理索引for item in list:
多类型支持列表/元组/字符串/字典均可for char in "Hello":
嵌套解包直接解包嵌套结构for x,y in [(1,2),(3,4)]

1.3 实战案例

▍案例1:计算阶乘

def factorial(n):
    result = 1
    for i in range(1, n+1):
        result *= i
    return result
print(factorial(5))  # 120

▍案例2:矩阵转置

matrix = [[1, 2], [3, 4], [5, 6]]
transposed = [[row[i] for row in matrix] for i in range(2)]
# [[1, 3, 5], [2, 4, 6]]

二、Range函数:循环控制利器

2.1 三大使用场景

# 场景1:指定次数循环
for _ in range(3): 
    print("重要操作!")

# 场景2:生成索引序列
for i in range(len(planets)):
    print(f"Index:{i}, Planet:{planets[i]}")

# 场景3:生成等差数列
even_nums = list(range(0, 10, 2))  # [0, 2, 4, 6, 8]

2.2 性能陷阱❗

# 错误示范:每次循环都计算range
for i in range(1, 1000000): 
    # 大数据量时产生性能问题

# 正确做法:先存储range对象
nums = range(1, 1000000) 
for i in nums:
    ...

三、While循环:条件驱动

3.1 基础模板

count = 0
while count < 5:
    print(f"当前计数:{count}")
    count += 1

3.2 经典应用

▍案例1:用户输入验证

while True:
    user_input = input("请输入Y/N:")
    if user_input.upper() in ('Y', 'N'):
        break
    print("输入无效!")

▍案例2:处理不确定长度数据

data = [1, 2, 3, 0, 4, 5]
while data and data[0] != 0:
    print(data.pop(0))  # 输出1 2 3

四、列表推导式:优雅的力量

4.1 语法进化论

# 传统写法
squares = []
for n in range(10):
    squares.append(n**2)

# 推导式写法
squares = [n**2 for n in range(10)]

4.2 高阶用法大全

类型语法示例说明
条件过滤[x for x in list if x>0]筛选元素
多重循环[x+y for x in a for y in b]笛卡尔积
嵌套推导[[0 for _ in range(3)] for _ in range(3)]生成二维数组
字典推导{k:v for k,v in zip(keys, values)}字典生成
生成器表达式(x**2 for x in range(5))惰性求值

4.3 性能对比🔥

import timeit

# 测试10万次操作
print(timeit.timeit('[x for x in range(100000)]', number=100))          # 0.98s
print(timeit.timeit('list(map(lambda x:x, range(100000)))', number=100))# 1.21s

五、Python之禅:平衡的艺术

5.1 代码对比

# 版本1:传统写法(8行)
def find_primes(n):
    primes = []
    for num in range(2, n+1):
        for i in range(2, int(num**0.5)+1):
            if num%i == 0:
                break
        else:
            primes.append(num)
    return primes

# 版本2:推导式写法(3行)
def find_primes(n):
    return [num for num in range(2, n+1) 
            if all(num % i != 0 for i in range(2, int(num**0.5)+1))]

5.2 最佳实践

  1. 可读性 > 简洁性:复杂的推导式拆分为多行
  2. 避免过度嵌套:超过3层的嵌套建议改用循环
  3. 善用生成器:大数据量时使用()代替[]
  4. 类型一致性:推导式结果类型需明确(列表/字典/集合)

六、课后练习(答案见评论区)

  1. 将二维列表[[1,2], [3,4], [5,6]]转换为一维列表
  2. 使用推导式生成九九乘法表
  3. 找出100以内的所有完美数(等于其真因子之和的数)

知识图谱

循环结构
For循环
While循环
Range控制
列表推导式
条件过滤
多重循环
嵌套推导
类型转换
循环控制语句
break
continue
else

创作不易,如果觉得有帮助,请点赞❤️收藏⭐!关于循环和推导式,你还有哪些想深入探讨的?欢迎在评论区留言!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青枫rua

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值