2010-01-09 52 views
6

Tôi đang cố gắng tìm hiểu cách lấy độ dài của mỗi danh sách được giữ trong một danh sách cụ thể. Ví dụ:Python tìm chiều dài danh sách trong danh sách con

a = [] 
a.append([]) 
a[0].append([1,2,3,4,5]) 
a[0].append([1,2,3,4]) 
a[0].append([1,2,3]) 

tôi muốn chạy một lệnh như:

len(a[0][:]) 

đó sẽ ra câu trả lời tôi muốn đó là một danh sách các độ dài [5,4,3]. Lệnh đó rõ ràng không hoạt động, và cũng không làm một số lệnh khác mà tôi đã thử. Hãy giúp tôi!

+0

Có thể rằng một danh sách bên trong một [0] cũng chứa danh sách? – danben

Trả lời

17

[len(x) for x in a[0]]?

>>> a = [] 
>>> a.append([]) 
>>> a[0].append([1,2,3,4,5]) 
>>> a[0].append([1,2,3,4]) 
>>> a[0].append([1,2,3]) 
>>> [len(x) for x in a[0]] 
[5, 4, 3] 
+1

Tùy thuộc vào kích cỡ của [0] bạn có thể muốn chọn giải pháp của Matthew Iselin bằng bản đồ. Trong một số trường hợp (không cần lambda) bản đồ có thể nhanh hơn một chút. Nhưng điều đó sẽ chỉ dành cho một [0] rất lớn – sberry

3
[len(x) for x in a[0]] 
3

này được gọi là List comprehension (nhấp vào để biết thêm và mô tả).

[len(l) for l in a[0]] 
8

map(len, a[0])

2
def lens(listoflists): 
    return [len(x) for x in listoflists] 

bây giờ, chỉ cần gọi lens(a[0]) thay vì mong muốn của bạn len(a[0][:]) (bạn có thể, nếu bạn nhấn mạnh, thêm rằng dư thừa [:], nhưng đó chỉ là làm một bản sao cho không có mục đích nào - không lãng phí, không muốn ;-).

1

sử dụng "trường cũ" thông thường cách

t=[] 
for item in a[0]: 
    t.append(len(item)) 
print t 
0

câu trả lời của Matthew không hoạt động bằng Python 3. Sau đây là một hoạt động ở cả hai Python 2 và Python 3

list(map(len, a[0]))

Các vấn đề liên quan