Rozumiem, że to proste pytanie. Czy TAK jest tak elitarnym miejscem? Spróbuj googlować, wyniki nie są tym, czego potrzebuję. Nauczyłem się Pythona na własnej skórze i nie znalazłem tego tam. Zadawałem już wcześniej pytania dotyczące najlepszego podejścia do nauki Pythona i jednogłośną odpowiedzią jest zdobycie podstawowej książki i po prostu zanurzenie się w niej. To mnie frustruje, ponieważ po prostu nie mogę znaleźć rozwiązania w żadnej książce lub materiale internetowym, którego szukam do tej pory? Dodatkowo twój komentarz naprawdę nie jest pomocny i zniechęca nowych członków do publikowania na SO.
super9
1
@Nai: Proponuję przeczytać samouczek Pythona: docs.python.org/tutorial/index.html . Ogólnie dokumentacja jest bardzo dobra. A czasem trzeba po prostu spróbować;)
Felix Kling
19
Wyszukałem w Google „dostęp do elementu w krotce” z zamiarem uzyskania dostępu do elementu na liście krotek. To doprowadziło mnie do twojego pytania, więc dziękuję. Jestem całkiem nowy w Pythonie i nie uważam odpowiedzi za szczególnie intuicyjną, ale to tylko ja!
Patrick Williams
7
Myślałem, że cała koncepcja z SO polegała na ułatwieniu znalezienia odpowiedzi na twoje pytania. Dlaczego pytanie musi być trudne, aby było ważne? Dobre pytanie, dobra odpowiedź.
Sceluswe
3
Znakomity! Krótka, ostra, rzeczowa odpowiedź na krótkie, ostre i rzeczowe pytanie. Oboje właśnie sprawiliście, że mój dzień!
Eric M
82
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]
Zwróć uwagę na []znak wokół wiersza kodu. To właśnie definiuje listę. To mówi ci, że ten kod zwraca listę, więc jest to listtyp. Dlatego technika ta nazywana jest „zrozumieniem listy”.
L to Twoja oryginalna lista. Dlatego powinieneś zdefiniować L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]przed wykonaniem powyższego kodu.
xjest zmienną, która istnieje tylko w zrozumieniu - spróbuj uzyskać dostęp xpoza 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.
Więc ten wiersz kodu dosłownie brzmi: „zwróć drugi element krotki dla wszystkich krotek na liście L.”
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.
W wersji 2.x xbędzie istnieć poza LC, z ostatnią wartością związaną z nim. Problem ten został rozwiązany w wersji 3.x.
Ignacio Vazquez-Abrams
Nie zdawałem sobie z tego sprawy. Dzięki za informację.
gary
4
Niesamowite wyjaśnienie @gary. Szczególnie doceniam twoje wskazanie, do czego odnosi się L.
Patrick Williams
Dzięki za informację zwrotną @PatrickWilliams. Cieszę się, że to pomaga. Możesz też to zrobić, [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.
gary
5
Zrozumienie listy jest absolutnym sposobem na zrobienie tego. Innym sposobem, który powinien być szybszy, jest mapi itemgetter.
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:
Deklarowanie zmiennej jako odniesienia do pustej listy.
Pętla for.
Wywołanie appendmetody 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 .
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 tolist
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ępx
poza zrozumieniem lub wpisztype(x)
po wykonaniu powyższej linii, a powie ciNameError: name 'x' is not defined
, atype(L)
zwraca<class 'list'>
.x[1]
wskazuje na drugą pozycję w każdej z krotek, natomiastx[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.
źródło
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
iitemgetter
.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 .
źródło
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] >>>
źródło
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))
źródło
a = [(0,2), (4,3), (9,9), (10,-1)] print(list(map(lambda item: item[1], a)))
źródło