Если вы хотите взять первый матч из потенциально большого количества, next(...)
отлично.Но если вы ожидаете ровно одного, подумайте об этом:
[actor] = [actor for actor in self.actors if actor.name==actorName]
Это всегда сканирует до конца, но в отличие от [0]
, деструктуризация в [actor]
выдает ошибку ValueError, если существует 0 или более чемодин матчВозможно, даже более важно, чем обнаружение ошибок, это сообщает о вашем предположении читателю.
Если вы хотите значение по умолчанию для 0 совпадений, но при этом все равно ловите> 1 совпадения:
[actor] = [actor for actor in self.actors if actor.name==actorName] or [default]
PS это такжеМожно использовать выражение генератора справа:
[actor] = (actor for actor in self.actors if actor.name==actorName)
, что должно быть чуть-чуть эффективнее.Вы можете использовать синтаксис кортежа с левой стороны - выглядит более симметрично, но запятая уродлива и ее слишком легко пропустить ИМХО:
(actor,) = [actor for actor in self.actors if actor.name==actorName]
actor, = [actor for actor in self.actors if actor.name==actorName]