Tôi tình cờ thấy mình có một nhu cầu lọc cơ bản: Tôi có một danh sách và tôi phải lọc nó theo một thuộc tính của các mục.
Mã của tôi trông như thế này:
my_list = [x for x in my_list if x.attribute == value]
Nhưng sau đó tôi nghĩ, sẽ tốt hơn nếu viết nó như thế này?
my_list = filter(lambda x: x.attribute == value, my_list)
Nó dễ đọc hơn, và nếu cần cho hiệu suất, lambda có thể được lấy ra để đạt được thứ gì đó.
Câu hỏi là: có bất kỳ cảnh báo trong việc sử dụng cách thứ hai? Bất kỳ sự khác biệt hiệu suất? Tôi có thiếu hoàn toàn Pythonic Way ™ không và nên thực hiện theo cách khác (chẳng hạn như sử dụng itemgetter thay vì lambda)?
filter
là một đối tượng trình tạo bộ lọc không phải là một danh sách.
filter
dễ đọc hơn. Khi bạn có một biểu thức đơn giản có thể được sử dụng như trong một listcomp, nhưng phải được bọc trong lambda (hoặc được xây dựng tương tự ngoài chức năngpartial
hoặcoperator
chức năng, v.v.) để chuyển đếnfilter
, đó là khi listcomps thắng.