[译] PEP202--列表推导式
PEP 原文 : https://www.python.org/dev/peps/pep-0202/ (opens new window)
PEP 标题: PEP 202 -- List Comprehensions
PEP 作者: Barry Warsaw
创建日期: 2000-7-13
合入版本: 2.0
译者 :豌豆花下猫
PEP 翻译计划 :https://github.com/chinesehuazhou/peps-cn
# 介绍
本 PEP 描述了给 Python 提议的一种语法拓展,即列表推导式。
# 拟议的方案
提议允许使用 for 和 if 语句,进行条件式地构造列表。for 循环和 if 语句可以嵌套式地使用。
# 基本原理
对比当前使用 map() 和 filter() 和/或嵌套循环来创建列表的场景,列表推导式会提供一种更为简洁的方法。
# 例子
>>> print [i for i in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print [i for i in range(20) if i%2 == 0]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
>>> nums = [1, 2, 3, 4]
>>> fruit = ["Apples", "Peaches", "Pears", "Bananas"]
>>> print [(i, f) for i in nums for f in fruit]
[(1, 'Apples'), (1, 'Peaches'), (1, 'Pears'), (1, 'Bananas'),
(2, 'Apples'), (2, 'Peaches'), (2, 'Pears'), (2, 'Bananas'),
(3, 'Apples'), (3, 'Peaches'), (3, 'Pears'), (3, 'Bananas'),
(4, 'Apples'), (4, 'Peaches'), (4, 'Pears'), (4, 'Bananas')]
>>> print [(i, f) for i in nums for f in fruit if f[0] == "P"]
[(1, 'Peaches'), (1, 'Pears'),
(2, 'Peaches'), (2, 'Pears'),
(3, 'Peaches'), (3, 'Pears'),
(4, 'Peaches'), (4, 'Pears')]
>>> print [(i, f) for i in nums for f in fruit if f[0] == "P" if i%2 == 1]
[(1, 'Peaches'), (1, 'Pears'), (3, 'Peaches'), (3, 'Pears')]
>>> print [i for i in zip(nums, fruit) if i[0]%2==0]
[(2, 'Peaches'), (4, 'Bananas')]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 参考实现
列表推导式会成为 Python 2.0 版本的一部分,文档在这里 (opens new window)。
# BDFL 声明
- 上面提议的语法就是 the Right One。
- 不允许 [x,y for ...] 格式;需要写成 [(x,y) for ...]。
- [... for x ... for y ...] 这种嵌套就像嵌套的 for 循环,后一个索引会先执行。
# 相关链接
本文档已进入公共领域。
源文档:https://github.com/python/peps/blob/master/pep-0202.txt (opens new window)
编辑 (opens new window)
上次更新: 2024-07-15, 03:27:09