[(1,2), (2,3), (4,5), (3,4), (6,7), (6,7), (3,8)]
Jak zwrócić drugą wartość z każdej krotki na tej liście?
Pożądane wyjście:
[2, 3, 5, 4, 7, 7, 8]
Odpowiedzi:
Ze zrozumieniem listy .
[x[1] for x in L]
Odpowiedź Ignacio jest tym, czego chcesz. Jednak jako ktoś, kto również uczy się Pythona, spróbuję go dla Ciebie przeanalizować ... Jak wspomniano, jest to rozumienie list (omówione na przykład w DiveIntoPython3 ). Oto kilka punktów:
[x[1] for x in L]
[]
znak wokół wiersza kodu. To właśnie definiuje listę. To mówi ci, że ten kod zwraca listę, więc jest to list
typ. Dlatego technika ta nazywana jest „zrozumieniem listy”.L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]
przed wykonaniem powyższego kodu.x
jest zmienną, która istnieje tylko w zrozumieniu - spróbuj uzyskać dostęp x
poza zrozumieniem lub wpisz type(x)
po wykonaniu powyższej linii, a powie ci NameError: name 'x' is not defined
, a type(L)
zwraca <class 'list'>
.x[1]
wskazuje na drugą pozycję w każdej z krotek, natomiast x[0]
wskazuje na każdą z pierwszych pozycji.Trudno jest powiedzieć, jak bardzo próbowałeś rozwiązać problem, zanim zadałeś pytanie, ale może po prostu nie byłeś zaznajomiony ze zrozumieniem? Spędziłbym trochę czasu na przeczytaniu rozdziału 3 DiveIntoPython lub dowolnego źródła na temat rozumień . Powodzenia.
x
będzie istnieć poza LC, z ostatnią wartością związaną z nim. Problem ten został rozwiązany w wersji 3.x.
[x[1] for x in [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]]
ale nie jest to takie łatwe dla oczu.
Zrozumienie listy jest absolutnym sposobem na zrobienie tego. Innym sposobem, który powinien być szybszy, jest map
i itemgetter
.
import operator
new_list = map(operator.itemgetter(1), old_list)
W odpowiedzi na komentarz, że OP nie mógł znaleźć odpowiedzi w google, wskażę super naiwny sposób na zrobienie tego.
new_list = []
for item in old_list:
new_list.append(item[1])
Wykorzystuje to:
append
metody z listy.Jeśli ktoś próbuje nauczyć się języka i nie może złożyć tych podstawowych elementów dla siebie, musi potraktować to jako ćwiczenie i zrobić to samodzielnie, nawet jeśli zajmuje to dwadzieścia godzin.
Trzeba nauczyć się myśleć o tym, czego się chce i porównywać to z dostępnymi narzędziami . Każdy element mojej drugiej odpowiedzi powinien być omówiony w podstawowym samouczku. Nie możesz nauczyć się programowania bez czytania .
LUB możesz użyć pandas
:
>>> import pandas as pd
>>> L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]
>>> df=pd.DataFrame(L)
>>> df[1]
0 2
1 3
2 5
3 4
4 7
5 7
6 8
Name: 1, dtype: int64
>>> df[1].tolist()
[2, 3, 5, 4, 7, 7, 8]
>>>
Lub numpy
:
>>> import numpy as np
>>> L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]
>>> arr=np.array(L)
>>> arr.T[1]
array([2, 3, 5, 4, 7, 7, 8])
>>> arr.T[1].tolist()
[2, 3, 5, 4, 7, 7, 8]
>>>
Możesz również użyć rozpakowywania sekwencji z zip
:
L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]
_, res = zip(*L)
print(res)
# (2, 3, 5, 4, 7, 7, 8)
Spowoduje to również utworzenie krotki _
z odrzuconych pierwszych elementów. Wyodrębnienie tylko drugiego jest możliwe, ale bardziej szczegółowe:
from itertools import islice
res = next(islice(zip(*L), 1, None))
a = [(0,2), (4,3), (9,9), (10,-1)]
print(list(map(lambda item: item[1], a)))