skip to navigation
skip to content

Python Wiki

Python Insider Blog

Python 2 or 3?

Help Fund Python

[Python resources in languages other than English]

Non-English Resources

Add an event to this calendar.

Times are shown in UTC/GMT.

Add an event to this calendar.

PEP: 202
Title: List Comprehensions
Version: b58467baacaa
Last-Modified:  2008-10-02 12:51:05 +0000 (Thu, 02 Oct 2008)
Author: Barry Warsaw <barry at python.org>
Status: Final
Type: Standards Track
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