543 Stimmen

Warum gibt es keine Tupel-Komprehension in Python?

Wie wir alle wissen, gibt es Listenverständnis, wie z.B.

[i for i in [1, 2, 3, 4]]

und es gibt Wörterbuchverständnis, wie z.B.

{i:j for i, j in {1: 'a', 2: 'b'}.items()}

aber

(i for i in (1, 2, 3))

wird letztendlich in einen Generator umgewandelt, nicht in eine tuple-Verständnis. Warum ist das so?

Meine Vermutung ist, dass ein tuple unveränderlich ist, aber das scheint nicht die Antwort zu sein.

16voto

mgilson Punkte 280928

Meine beste Vermutung ist, dass ihnen die Klammern ausgegangen sind und sie nicht dachten, dass es nützlich genug wäre, um eine "hässliche" Syntax hinzuzufügen...

15voto

macm Punkte 131

Tupel können nicht effizient wie eine Liste angehängt werden.

Also müsste eine Tupel-Liste intern verwenden und dann in ein Tupel umwandeln.

Das wäre dasselbe wie das, was Sie jetzt tun: tuple( [ comprehension ] )

3voto

ilias iliadis Punkte 531

Klammern erzeugen kein Tupel. dh one = (two) ist kein Tupel. Der einzige Ausweg ist entweder one = (two,) oder one = tuple(two). Eine Lösung ist also:

tuple(i for i in myothertupleorlistordict)

1voto

jamylak Punkte 119693

Ich glaube, es dient einfach der Klarheit, wir möchten die Sprache nicht mit zu vielen verschiedenen Symbolen überladen. Auch eine Tuple-Comprehension ist nie notwendig, eine Liste kann stattdessen einfach mit vernachlässigbaren Geschwindigkeitsunterschieden verwendet werden, im Gegensatz zu einer Dictionary-Comprehension im Vergleich zu einer Listen-Comprehension.

0voto

B.R. Punkte 127

Auf meinem Python (3.5) ist die Verwendung eines Generators mit deque aus collections etwas schneller als die Verwendung einer list Comprehension:

>>> from collections import deque
>>> timeit.timeit(lambda: tuple([i for i in range(10000000)]),number=10)
9.294099200000005
>>> timeit.timeit(lambda: tuple(deque((i for i in range(10000000)))),number=10)
9.007653800000014

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X