Bạn phải cả hai bộ lọc và sử dụng một lập luận key
để tối đa:
from operator import itemgetter
max(filter(lambda a: a[2] >= 100, yourlist), key=itemgetter(1))
Bộ lọc cũng có thể được thể hiện dưới dạng một biểu thức máy phát điện:
max((t for t in yourlist if t[2] >= 100), key=itemgetter(1))
Demo:
>>> yourlist = [(1, 2, 300), (2, 3, 400), (3, 6, 50)]
>>> max((t for t in yourlist if t[2] >= 100), key=itemgetter(1))
(2, 3, 400)
>>> max(filter(lambda a: a[2] >= 100, yourlist), key=itemgetter(1))
(2, 3, 400)
Lưu ý rằng vì bạn lọc, thật dễ dàng để kết thúc với một danh sách trống để chọn tối đa từ, vì vậy bạn có thể cần phải nắm bắt ValueError
s trừ khi bạn cần ngoại lệ đó để truyền bá ngăn xếp cuộc gọi:
try:
return max(filter(lambda a: a[2] >= 100, yourlist), key=itemgetter(1))
except ValueError:
# Return a default
return (0, 0, 0)
Nguồn
2012-09-17 12:56:27
và bạn mong đợi những gì nếu tất cả các giá trị có 'attr3 <100'? 'max()' sẽ tăng một ValueError nếu nó nhận được một chuỗi rỗng. –