2017-02-09 2 views
0

Ich habe eine Menge Fragen über die Verwendung von * vor einem Tupel gesehen, um es in etwas anderes zu erweitern, aber es scheint nicht für mich zu arbeiten.Python-In-Place-Entpacken scheint nicht wie erwartet zu funktionieren

>>> l1 = (1, 2, 3) 
>>> l2 = (0, l1, 4) 
>>> l2 (0, (1, 2, 3), 4) 
>>> l2 = (0, *l1, 4) 
File "<stdin>", line 1 
    l2 = (0, *l1, 4) 
      ^ SyntaxError: invalid syntax 

Wie Sie sehen können. Ich kann nicht l1 bekommen in l2 zu erweitern mit dem * Operator ...

Hinweis: Dies ist python2.7

+0

Es ist einfach nicht möglich. Just do 'l2 = (0,) + l1 + (4,)' –

+2

Dies funktioniert nur bei relativ neuen Versionen von Python 3. –

+1

Welche Version verwenden Sie? Das erweiterte Tupel-Entpacken ist eine relativ späte Ergänzung zu Python 3 –

Antwort

6

In-place auspacken hat in Python 3.5 und es funktioniert in späteren Versionen nicht älter eingeführt Einsen.

# Python 3.5 
In [39]: (3, *l1, 4) 
Out[39]: (3, 1, 2, 3, 4) 

In älteren Versionen können Sie + Operator oder itertools.chain Funktion für längere Iterables verwenden:

In [40]: (3,) + l1 + (4,) 
Out[40]: (3, 1, 2, 3, 4) 

In [41]: from itertools import chain 

In [45]: tuple(chain((3,), l1, (4,))) 
Out[45]: (3, 1, 2, 3, 4) 
+1

Setze Kommas in die Argumente von 'chain' . –

+0

Es ist entweder Kette oder +, nicht beide –

+0

@MadPhysicist Ja, behoben! – Kasramvd

1

Zunächst einmal, das sind nicht lists, sind sie tuples. Sie sind ähnlich, aber nicht das Gleiche.

Zweitens, die *arg Syntax Argument Erweiterung genannt wird, und es funktioniert nur für Funktionsargumente

def func(a, b): 
    return a + b 

my_list = [1, 2] 
func(*my_list) 

EDIT:

offenbar an Ort und Stelle wurde das Auspacken in Python hinzugefügt 3.5, Aber für die überwältigende Mehrheit der Python-Installationen, denen Sie begegnen, gilt meine Antwort immer noch. Vielleicht im Jahr 2020, wenn Python 2 nicht mehr unterstützt wird, wird sich das ändern, aber für den Augenblick und die unmittelbare Zukunft, erwarte ich, dass das oben Gesagte wahr ist.

+3

Nein, in der wunderbaren Welt von Python> = 3.5 funktioniert es. –

+0

Und deshalb ist es wichtig, Ihre Version von Python anzugeben. –

+0

Für die Aufzeichnung, habe ich nicht downvote. –

Verwandte Themen