używam generatorów do wyszukiwania w listach jak ten prosty przykład:W jaki sposób można uzyskać generator Python, aby zwrócić None, a nie StopIteration?
>>> a = [1,2,3,4]
>>> (i for i, v in enumerate(a) if v == 4).next()
3
(Wystarczy wykadrować przykładzie trochę używam bardzo dużo dłuższych list w stosunku do powyższego, a wpisy są trochę bardziej skomplikowane niż int
. robię to w ten sposób, więc cała listy nie będzie przesuwany za każdym razem, kiedy wyszukiwania nich)
teraz gdybym zamiast zmienić się i == 666
, byłoby zwrócić StopIteration
ponieważ może” t znaleźć dowolny wpis 666
w a
.
W jaki sposób mogę go zwrócić zamiast numeru None
? Mógłbym oczywiście zawinąć to w klauzulę try ... except
, ale czy jest tam bardziej pythonic sposób to zrobić?
Czy mogę zapytać, dlaczego używasz generatory, aby szukać rzeczy? –
Czego oczekujesz, jeśli szukasz czegoś, co już minęło? Dlaczego nie po prostu użyć bardziej "pythonic" sposób jak "if in a: ..."? –
@Many D, 'if i in a' nie pomaga, jeśli chcesz uzyskać indeks znalezionego przedmiotu. – senderle