forked from python/peps
-
Notifications
You must be signed in to change notification settings - Fork 0
/
pep-0202.txt
94 lines (66 loc) · 2.33 KB
/
pep-0202.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
PEP: 202
Title: List Comprehensions
Version: $Revision$
Last-Modified: $Date$
Author: barry@python.org (Barry Warsaw)
Status: Final
Type: Standards Track
Content-Type: text/x-rst
Created: 13-Jul-2000
Python-Version: 2.0
Post-History:
Introduction
============
This PEP describes a proposed syntactical extension to Python, list
comprehensions.
The Proposed Solution
=====================
It is proposed to allow conditional construction of list literals using for and
if clauses. They would nest in the same way for loops and if statements nest
now.
Rationale
=========
List comprehensions provide a more concise way to create lists in situations
where ``map()`` and ``filter()`` and/or nested loops would currently be used.
Examples
========
::
>>> 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')]
Reference Implementation
========================
List comprehensions become part of the Python language with release 2.0,
documented in [1]_.
BDFL Pronouncements
===================
* The syntax proposed above is the Right One.
* The form ``[x, y for ...]`` is disallowed; one is required to write
``[(x, y) for ...]``.
* The form ``[... for x... for y...]`` nests, with the last index
varying fastest, just like nested for loops.
References
==========
.. [1] http://docs.python.org/reference/expressions.html#list-displays
..
Local Variables:
mode: indented-text
indent-tabs-mode: nil
End: