2012-11-15 53 views
13

thể trùng lặp:
Python’s most efficient way to choose longest string in list?Python: Độ dài của danh sách con dài nhất?

tôi có một danh sách L

L = [[1,2,3],[5,7],[1,3],[77]] 

Tôi muốn quay trở lại chiều dài của sublist dài nhất mà không cần phải lặp qua chúng, trong trường hợp này là 3 vì [1,2,3] là chiều dài 3 và là dài nhất trong bốn danh sách con. Tôi đã thử len (max (L)) nhưng điều này không làm những gì tôi muốn. Bất kỳ cách nào để làm điều này hoặc là một vòng lặp theo cách duy nhất của tôi?

+0

dup của http://stackoverflow.com/q/873327/1180720 – gefei

Trả lời

33

max(L,key=len) sẽ cung cấp cho bạn đối tượng có chiều dài dài nhất ([1,2,3] trong ví dụ của bạn) - Để thực sự có độ dài (nếu đó là tất cả những gì bạn quan tâm), bạn có thể làm len(max(L,key=len)). chia nó thành 2 dòng. Hoặc bạn có thể sử dụng phiên bản được cung cấp bởi ecatamur.

Tất cả các câu trả lời này đều có vòng lặp - trong trường hợp của tôi, các vòng lặp là ẩn ngụ thường có nghĩa là chúng sẽ được thực thi trong mã máy gốc được tối ưu hóa. Nếu bạn nghĩ về nó, Làm thế nào bạn có thể biết được yếu tố nào là dài nhất mà không cần nhìn vào từng yếu tố?


Cuối cùng, lưu ý rằng key=function không phải là tính năng dành riêng cho max. Rất nhiều nội trang trăn (max, min, sorted, itertools.groupby, ...) sử dụng đối số từ khóa cụ thể này. Nó chắc chắn đáng để đầu tư một chút thời gian để hiểu nó hoạt động như thế nào và nó hoạt động như thế nào.

+0

Làm thế nào mà làm việc? Ah ok vậy không có cách nào để tránh nó? Được rồi, cám ơn! – IAmBatman

+0

@IAmBatman Bạn đã đọc tài liệu về 'max' chưa? Bạn có biết rằng các hàm là các lớp-giá trị đầu tiên (có nghĩa là, trong số những thứ khác, chúng có thể được truyền cho các hàm khác làm đối số) không? – delnan

+0

@IAmBatman - 'max' áp dụng hàm' key' cho mỗi phần tử trong danh sách của bạn và chọn hàm mà hàm 'key' trả về lớn nhất. – mgilson

10

Hãy thử một sự hiểu biết:

max(len(l) for l in L) 
+0

Sử dụng từ khóa 'khoá' nhanh hơn, tôi nghĩ vậy. –

+0

@MartijnPieters Có khả năng, nhìn thấy như nó trong C (và PyPy có vấn đề tối ưu hóa biểu thức máy phát điện trong một số trường hợp). Nhưng đó không phải là lý do tại sao tôi muốn giới thiệu nó. Nó cũng rõ ràng hơn với tôi (nhưng điều này là tốt quá, và tôi đã nhận thấy tôi nạc nhiều hơn đối với lập trình chức năng hơn so với nhiều lập trình Python). – delnan

+0

@MartijnPieters - Có những khác biệt rất tinh tế. 'max (L, key = len)' cho đối tượng với 'len' lớn nhất, nhưng nó không cho bạn chiều dài của nó :) – mgilson

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