Python 列表推导式入门:用一行代码写出更简洁的循环
【摘要】 本文用几个小例子讲清 Python 列表推导式的基本写法、带条件过滤的写法,以及它和普通循环的取舍,适合刚学完循环的初学者。
写 Python 时,常常要从一个序列生成新的列表。比如想得到 1 到 5 的平方,新手最常见的写法是:
squares = []
for i in range(1, 6):
squares.append(i * i)
print(squares) # [1, 4, 9, 16, 25]
这样写没问题,但 Python 提供了一种更简洁的写法——列表推导式,一行就能完成同样的事:
squares = [i * i for i in range(1, 6)]
一、基本写法
列表推导式的样子是:
[表达式 for 变量 in 可迭代对象]
表达式决定新元素长什么样,for 负责遍历。再比如,把一串名字统一转成大写:
names = ["amy", "bob", "cindy"]
upper = [name.upper() for name in names]
print(upper) # ['AMY', 'BOB', 'CINDY']
二、加上条件过滤
想先挑出偶数,再求平方,条件写在最后:
even_squares = [i * i for i in range(1, 11) if i % 2 == 0]
print(even_squares) # [4, 16, 36, 64, 100]
顺序是先遍历、再过滤、最后计算表达式。
三、和普通循环怎么选
推导式适合“一句话能说清”的变换;如果逻辑里有多个步骤、或者嵌套超过两层,还是写回普通循环更易读。例如下面这样写就过了头:
# 不推荐:嵌套太多,一眼看不懂
result = [[j for j in range(3)] for i in range(3)]
四、小结
- 语法:
[表达式 for 变量 in 序列 if 条件] - 适合:转换元素、过滤元素、快速生成新列表
- 原则:能一眼看懂就用,看不懂就拆回循环
先从简单的例子练起,写上十来个推导式,它很快会成为你写 Python 时最顺手的工具之一。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)