2011-06-23 17 views
18

Przepraszam z góry, ale jestem nowy w Pythonie. Mam listę tuples i zastanawiałem się, w jaki sposób mogę odwołać się, powiedzmy, do pierwszego elementu każdego z tuple na liście. Myślę, że jest to coś w rodzaju:Odsyłacz do elementu na liście krotek

wiesz, [list_element[tuple_element]]? Jednak nie wydaje się to właściwym podejściem. Każda pomoc będzie bardzo ceniona.

Dzięki,

Turner

+0

myList [i] [0] lub więcej zabawy: [i [0] bo w myList] – phkahler

Odpowiedz

29

Można uzyskać listę pierwszego elementu w każdej krotki przy użyciu list comprehension:

>>> my_tuples = [(1, 2, 3), ('a', 'b', 'c', 'd', 'e'), (True, False), 'qwerty'] 
>>> first_elts = [x[0] for x in my_tuples] 
>>> first_elts 
[1, 'a', True, 'q'] 
+0

co jeśli chcę, aby uzyskać dostęp do wszystkich elementów krotki, tak jak mam listę = [(1,2), (3,4), (5,6)]. Chcę uzyskać 1, 2 obie, a następnie 3,4 itd. I nie tylko pierwszy lub ostatni element. – Liza

+0

@Liza 'za x w my_tuples' ...? –

4

Kod

my_list = [(1, 2), (3, 4), (5, 6)] 
for t in my_list: 
    print t 

wydruki

(1, 2) 
(3, 4) 
(5, 6) 

Pętla iteruje ponad my_list i przypisuje elementy my_list do t jeden po drugim. Elementy my_list są krotkami, więc t będzie zawsze krotką. Aby uzyskać dostęp do pierwszego elementu krotki t użyć t[0]:

for t in my_list: 
    print t[0] 

aby uzyskać dostęp do pierwszego elementu krotki w danym indeksie i na liście, można użyć

print my_list[i][0] 
3

zamiast:

first_element = myList[i[0]] 

prawdopodobnie chcesz:

first_element = myList[i][0] 
3

Można również użyć itemgetter operatora:

from operator import itemgetter 
data = [('c','r'), (2, 3), ('e'), (True, False),('text','sample')] 
map(itemgetter(0), my_tuples) 
34

Wszystkie inne odpowiedzi Oto poprawna, ale nie wyjaśniają, dlaczego to, co staraliśmy się mylił. Kiedy robisz myList[i[0]], mówisz Pythonowi, że i jest krotką i chcesz, aby wartość lub pierwszy element krotki i był indeksem dla myList.

W większości języków programowania, kiedy trzeba uzyskać dostęp do zagnieżdżonego typu danych (takich jak tablice, listy lub krotki), dodaje się nawiasy, aby przejść do najbardziej wewnętrznego elementu. Pierwszy nawias daje ci lokalizację krotki na twojej liście. Drugi nawias zapewnia lokalizację przedmiotu w krotce.

Jest to szybki prymitywny przykład, który wymyśliłem:

info = [ (1, 2), (3, 4), (5, 6) ] 

info[0][0] == 1 
info[0][1] == 2 
info[1][0] == 3 
info[1][1] == 4 
info[2][0] == 5 
info[2][1] == 6 
+2

To jest najlepsza odpowiedź na stronie. – dotancohen

+0

Zastanawiam się, czy ta odpowiedź ma wyższy koszt obliczeniowy niż odpowiedź ze zrozumieniem listy? Ten drugi z pewnością ma wyższy koszt pamięci! –

1

Więc trzeba „listę krotek”, daj mi zakładać, że manipulujesz jakiś 2-wymiarową macierz, aw ten obudowa, jeden wygodny interfejs do osiągnięcia tego, czego potrzebujesz, zapewnia jeden.

Załóżmy, że masz tablicę arr = numpy.array([[1, 2], [3, 4], [5, 6]]), możesz użyć arr[:, 0], aby uzyskać nową tablicę wszystkich pierwszych elementów w każdej "krotce".

1

Oto krótki przykład:

termList = [] 
termList.append(('term1', [1,2,3,4])) 
termList.append(('term2', [5,6,7,8])) 
termList.append(('term3', [9,10,11,12])) 

result = [x[1] for x in termList if x[0] == 'term3'] 

print(result) 
Powiązane problemy