2010-01-14 33 views

Trả lời

11

Chắc chắn là một trường hợp cho một sự hiểu biết danh sách:

m = [row for row in l if 'a' in row[0]] 

Ở đây tôi đang tham gia "có 'a' trong phần tử đầu tiên" của bạn theo nghĩa đen, từ đâu việc sử dụng các nhà điều hành in. Nếu bạn muốn hạn chế này để "có 'a' như phần tử đầu tiên" (một điều rất khác với những gì bạn thực sự đã viết -!), Sau đó

m = [row for row in l if 'a' == row[0]] 

là giống như nó ;-).

1
m = [i for i in l if i[0] == 'a'] 
0

Với filter chức năng:

m = filter(lambda x: x[0] == 'a', l) 

hoặc như một danh sách hiểu:

m = [x for x in l where x[0] == 'a'] 
0

Có gì sai với chỉ:

m = [i for i in l if i[0] == 'a'] 

Hoặc:

m = filter(lambda x: x[0] == 'a', l) 

Tôi nghi ngờ sự khác biệt giữa chúng sẽ có hiệu suất đáng kể. Sử dụng cái nào thuận tiện nhất. Tôi không thích lambda s, nhưng filter có thể được thay thế bằng itertools.ifilter cho danh sách lớn hơn nếu đó là vấn đề, nhưng bạn cũng có thể thay đổi danh sách hiểu cho máy phát điện (thay đổi []) để đạt được cùng một kết quả chung. Ngoài ra, chúng có lẽ giống hệt nhau.

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