Following system colour scheme Selected dark colour scheme Selected light colour scheme

Python Enhancement Proposals

PEP 202 – List Comprehensions

Autor:
Barry Warsaw <barry at python.org>
Status:
Final
Typ:
Standards Track
Erstellt:
13-Jul-2000
Python-Version:
2.0
Post-History:


Inhaltsverzeichnis

Einleitung

Dieses PEP beschreibt eine vorgeschlagene syntaktische Erweiterung für Python, List Comprehensions.

Die vorgeschlagene Lösung

Es wird vorgeschlagen, die bedingte Konstruktion von Listenliteralen mit for- und if-Klauseln zuzulassen. Sie würden auf die gleiche Weise verschachtelt, wie for-Schleifen und if-Anweisungen jetzt verschachtelt sind.

Begründung

List Comprehensions bieten eine prägnantere Möglichkeit, Listen in Situationen zu erstellen, in denen derzeit map() und filter() und/oder verschachtelte Schleifen verwendet würden.

Beispiele

>>> 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')]

Referenzimplementierung

List Comprehensions werden mit der Veröffentlichung 2.0 Teil der Python-Sprache und sind in [1] dokumentiert.

BDFL-Bekanntmachungen

  • Die oben vorgeschlagene Syntax ist die richtige.
  • Die Form [x, y for ...] ist nicht zulässig; man muss [(x, y) for ...] schreiben.
  • Die Form [... for x... for y...] verschachtelt, wobei der letzte Index am schnellsten variiert, genau wie bei verschachtelten for-Schleifen.

Referenzen


Quelle: https://github.com/python/peps/blob/main/peps/pep-0202.rst

Zuletzt geändert: 2025-02-01 08:55:40 GMT