pythonowa edycja listy krotek ciągów [duplikat]

Nov 16 2020

mysql wypisuje listę krotek formularza

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

Chcę listę krotek formularza

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

tj. dwa ostatnie elementy każdej krotki, więc mogę umieścić to w moim poleceniu executemany sql i pobrać następny fragment danych.

moja intuicja była taka, że ​​mogę uzyskać żądaną macierz za pomocą polecenia

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

ale pythonowi to się nie podoba. Dlaczego to nie działa i jaki jest najbardziej pytoniczny sposób uzyskania żądanej listy krotek?

Odpowiedzi

2 AnnZen Nov 16 2020 at 17:01

Ponieważ chcesz, aby ostatnie dwa elementy każdej krotki, użycie wycinka [1:] (tak jak w innych odpowiedziach) nie zadziała, gdy liczba elementów w każdej krotce jest inna niż 3.

Zamiast tego użyj rozumienia listowego z negatywnym fragmentem [:-2]:

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

Wynik:

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

Twoja składnia jest nieco błędna, ale zastosowałeś właściwe podejście.

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

Będziesz chciał pokroić każdy item w 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

Możesz przejść w ten sposób, tutaj pętle pójdą na końcu:

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