2011-06-23 25 views
18

Xin lỗi trước, nhưng tôi mới sử dụng Python. Tôi có một danh sách các số tuples và tôi đã tự hỏi làm thế nào tôi có thể tham chiếu, ví dụ, phần tử đầu tiên của mỗi tuple trong danh sách. Tôi nghĩ đó là một cái gì đó giống nhưTham chiếu một phần tử trong danh sách các bộ phận

for i in number_of_tuples : 
    first_element = myList[i[0]] 

bạn biết, [list_element[tuple_element]]? Tuy nhiên, đây không phải là cách tiếp cận đúng. Mọi sự trợ giúp sẽ rất được trân trọng.

Cảm ơn,

Turner

+0

myList [i] [0] hoặc vui hơn: [i [0] for i in myList] – phkahler

Trả lời

29

Bạn có thể nhận được một danh sách các yếu tố đầu tiên trong mỗi tuple sử dụng một 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

gì nếu tôi muốn truy cập tất cả các yếu tố của tuple, như tôi có một danh sách = [(1,2), (3,4), (5,6)]. Tôi muốn nhận được 1, 2 cả và sau đó 3,4 và vv .. Và không chỉ là yếu tố đầu tiên hoặc cuối cùng. – Liza

+0

@Liza 'cho x trong my_tuples' ...? –

4

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

in

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

Vòng lặp lặp qua my_list và gán các phần tử của my_list đến t cái kia. Các thành phần của my_list xảy ra là các bộ dữ liệu, vì vậy t sẽ luôn là một bộ tuple. Để truy cập vào phần tử đầu tiên của tuple t, sử dụng t[0]:

for t in my_list: 
    print t[0] 

Để truy cập vào phần tử đầu tiên của tuple tại chỉ số cho i trong danh sách, bạn có thể sử dụng

print my_list[i][0] 
3

Thay vì:

first_element = myList[i[0]] 

Bạn có thể muốn:

first_element = myList[i][0] 
3

Bạn cũng có thể sử dụng itemgetter điều hành:

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

Tất cả các câu trả lời khác ở đây là chính xác nhưng không giải thích lý do tại sao những gì bạn đang cố gắng đã sai. Khi bạn làm myList[i[0]], bạn đang nói với Python rằng i là một bộ dữ liệu và bạn muốn giá trị hoặc phần tử đầu tiên của tuple i làm chỉ mục cho myList.

Trong đa số ngôn ngữ lập trình khi bạn cần truy cập loại dữ liệu lồng nhau (chẳng hạn như mảng, danh sách hoặc bộ dữ liệu), bạn nối thêm dấu ngoặc để vào mục trong cùng. Khung đầu tiên cung cấp cho bạn vị trí của tuple trong danh sách của bạn. Khung thứ hai cung cấp cho bạn vị trí của mục trong bộ dữ liệu.

Đây là một ví dụ thô sơ nhanh chóng mà tôi đã đưa ra:

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

Đây là câu trả lời hay nhất trên trang. – dotancohen

+0

Tôi tự hỏi liệu câu trả lời này có chi phí tính toán cao hơn so với câu trả lời hiểu danh sách không? Sau này chắc chắn có chi phí bộ nhớ cao hơn! –

1

Vì vậy, bạn có "một danh sách các hàng", hãy để tôi cho rằng bạn đang thao tác với một số ma trận 2 chiều, và trong này trường hợp, một giao diện thuận tiện để thực hiện những gì bạn cần là số numpy cung cấp.

Giả sử bạn có một mảng arr = numpy.array([[1, 2], [3, 4], [5, 6]]), bạn có thể sử dụng arr[:, 0] để có được một mảng mới của tất cả các phần tử đầu tiên trong mỗi bộ "tuple".

1

Dưới đây là một ví dụ nhanh:

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) 
Các vấn đề liên quan