pythonisches Bearbeiten einer Liste von String-Tupples [Duplikat]

Nov 16 2020

mysql hat eine Liste von Tupeln des Formulars ausgegeben

a=[("1","2","3"),("4","5","6"),("7","8","9")]

Ich möchte eine Liste der Tupel des Formulars

c=[("2","3"),("5","6"),("8","9")]

dh die letzten beiden Elemente jedes Tupels, damit ich das in einen Befehl für meine SQL Executemany einfügen und die nächsten Daten abrufen kann.

Meine Intuition war, dass ich mit dem Befehl die gewünschte Matrix erhalten konnte

c=[for b in a: b[1:]]

aber Python, mag das nicht. Warum funktioniert das nicht und was ist der pythonischste Weg, um die gewünschte Liste von Tupeln zu erhalten?

Antworten

2 AnnZen Nov 16 2020 at 17:01

Da Sie die letzten beiden Elemente jedes Tupels möchten, funktioniert die Verwendung des Slice [1:] (wie in den anderen Antworten) nicht, wenn die Anzahl der Elemente in jedem Tupel nicht 3 beträgt.

Verwenden Sie stattdessen ein Listenverständnis mit dem negativen Slice von [:-2]:

a = [("1","2","3"),("4","5","6"),("7","8","9")]
a = [t[-2:] for t in a]
print(a)

Ausgabe:

[('2', '3'), ('5', '6'), ('8', '9')]
3 AdamSmith Nov 16 2020 at 16:54

Sie haben eine etwas falsche Syntax, aber den richtigen Ansatz gewählt.

c = [b[1:] for b in a]
3 AKX Nov 16 2020 at 16:54

Sie möchten jedes iTem in a:

>>> a = [("1","2","3"),("4","5","6"),("7","8","9")]
>>> [i[1:] for i in a]
[('2', '3'), ('5', '6'), ('8', '9')]
3 WasifHasan Nov 16 2020 at 16:55

Sie können so durchgehen, hier werden am Ende Schleifen durchlaufen:

a=[(1,2,3),(4,5,6),(7,8,9)]
c=[b[1:] for b in a]
print(c)