ฉันต้องการวิธีใช้สำนวนเพื่อค้นหาองค์ประกอบแรกในรายการที่ตรงกับภาคแสดง
รหัสปัจจุบันค่อนข้างน่าเกลียด:
[x for x in seq if predicate(x)][0]
ฉันคิดว่าจะเปลี่ยนเป็น:
from itertools import dropwhile
dropwhile(lambda x: not predicate(x), seq).next()
แต่จะต้องมีสิ่งที่สวยงามกว่านี้ ... และมันจะดีถ้ามันคืนNone
ค่าแทนที่จะยกข้อยกเว้นหากไม่พบคู่ที่ตรงกัน
ฉันรู้ว่าฉันสามารถกำหนดฟังก์ชันเช่น:
def get_first(predicate, seq):
for i in seq:
if predicate(i): return i
return None
แต่ค่อนข้างจืดชืดที่จะเริ่มต้นกรอกรหัสด้วยฟังก์ชั่นยูทิลิตี้เช่นนี้ (และคนอาจจะไม่สังเกตเห็นว่าพวกเขามีอยู่แล้วดังนั้นพวกเขาจึงมักจะทำซ้ำในช่วงเวลา) หากมีการสร้างอินที่ให้ไว้เหมือนกัน