2013-08-26 51 views
19

Nếu tôi có danh sách các danh sách và chỉ muốn thao tác một mục riêng lẻ trong danh sách đó, tôi sẽ làm như thế nào?Truy cập mục trong danh sách các danh sách

Ví dụ:

List1 = [[10,13,17],[3,5,1],[13,11,12]] 

gì nếu tôi muốn lấy một giá trị (nói 50) và tìm kiếm chỉ tại sublist đầu tiên trong List1, và trừ 10 (giá trị đầu tiên), sau đó thêm 13, sau đó trừ 17?

Trả lời

23

Bạn có thể truy cập các phần tử trong danh sách danh sách bằng cách xác định danh sách bạn quan tâm trước và sau đó chỉ định yếu tố nào của danh sách bạn muốn. Ví dụ, 17 là yếu tố 2 trong danh sách 0, đó là list1[0][2]:

>>> list1 = [[10,13,17],[3,5,1],[13,11,12]] 
>>> list1[0][2] 
17 

Vì vậy, ví dụ bạn sẽ

50 - list1[0][0] + list1[0][1] - list1[0][2] 
+2

@ John Vui mừng tôi có thể giúp. Đừng quên [chấp nhận câu trả lời] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235). – arshajii

+0

Điều này không hoạt động đối với danh sách các danh sách trong python. list1 = [list2, list3, list4] danh sách [x] [y] không được xác định. –

+2

@PlokavianNerveGas Có, nó hoạt động, bạn nghĩ câu trả lời này là gì? Bạn gọi danh sách của bạn là 'list1' rồi cố gắng lấy' list [x] [y] ', không phải' list1 [x] [y] '. Đó là vấn đề của bạn. – numbermaniac

0
50 - List1[0][0] + List[0][1] - List[0][2] 

List[0] cung cấp cho bạn danh sách đầu tiên trong danh sách (thử print List[0]). Sau đó, bạn chỉ mục vào nó một lần nữa để có được các mục của danh sách đó. Hãy nghĩ về nó theo cách này: (List1[0])[0].

1
List1 = [[10,-13,17],[3,5,1],[13,11,12]] 

num = 50 
for i in List1[0]:num -= i 
print num 
0
for l in list1: 
    val = 50 - l[0] + l[1] - l[2] 
    print "val:", val 

Vòng qua danh sách và thực hiện hành động trên sublist như bạn muốn.

4

Bạn có thể sử dụng itertools.cycle:

>>> from itertools import cycle 
>>> lis = [[10,13,17],[3,5,1],[13,11,12]] 
>>> cyc = cycle((-1, 1)) 
>>> 50 + sum(x*next(cyc) for x in lis[0]) # lis[0] is [10,13,17] 
36 

Ở đây khái niệm máy phát điện bên trong sum sẽ quay trở lại một cái gì đó như thế này:

>>> cyc = cycle((-1, 1)) 
>>> [x*next(cyc) for x in lis[0]] 
[-10, 13, -17] 

Bạn cũng có thể sử dụng zip đây:

>>> cyc = cycle((-1, 1)) 
>>> [x*y for x, y in zip(lis[0], cyc)] 
[-10, 13, -17] 
+0

'itertools' có rất nhiều đá quý. Cảm ơn, không biết về 'chu kỳ'. –

+0

@DonaldMiner Cảm ơn Raymond Hettinger đã tạo mô-đun tuyệt vời này. ;-) –

0

này mã sẽ in từng số riêng lẻ:

for myList in [[10,13,17],[3,5,1],[13,11,12]]: 
    for item in myList: 
     print(item) 

Hoặc đối với trường hợp sử dụng cụ thể của bạn:

((50 - List1[0][0]) + List1[0][1]) - List1[0][2] 
Các vấn đề liên quan