pythonowa edycja listy krotek ciągów [duplikat]
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
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')]
Twoja składnia jest nieco błędna, ale zastosowałeś właściwe podejście.
c = [b[1:] for b in a]
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')]
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)