Tôi muốn một cách thành ngữ để tìm phần tử đầu tiên trong danh sách khớp với một vị ngữ.
Mã hiện tại khá xấu:
[x for x in seq if predicate(x)][0]
Tôi đã nghĩ về việc thay đổi nó thành:
from itertools import dropwhile
dropwhile(lambda x: not predicate(x), seq).next()
Nhưng phải có một cái gì đó thanh lịch hơn ... Và sẽ thật tuyệt nếu nó trả về một None
giá trị thay vì đưa ra một ngoại lệ nếu không tìm thấy kết quả khớp nào.
Tôi biết tôi chỉ có thể định nghĩa một chức năng như:
def get_first(predicate, seq):
for i in seq:
if predicate(i): return i
return None
Nhưng thật vô vị khi bắt đầu điền mã với các hàm tiện ích như thế này (và mọi người có thể sẽ không nhận thấy rằng chúng đã ở đó, vì vậy chúng có xu hướng được lặp lại theo thời gian) nếu có các phần mềm được xây dựng tương tự.