estoy utilizando generadores para realizar búsquedas en las listas como este sencillo ejemplo:¿Cómo puedo obtener un generador de Python para que devuelva None en lugar de StopIteration?
>>> a = [1,2,3,4]
>>> (i for i, v in enumerate(a) if v == 4).next()
3
(Sólo para enmarcar un poco el ejemplo, estoy usando listas mucho más largos en comparación con la de arriba, y las entradas son una poco más complicado que int
. lo hago de esta manera por lo que las listas completas no serán atravesados cada vez que me los busco)
Ahora si me gustaría cambiar eso en lugar de i == 666
, devolvería un StopIteration
ya que puede' t encuentra cualquier entrada 666
en a
.
¿Cómo puedo hacer que vuelva None
en su lugar? Por supuesto, podría envolverlo en una cláusula try ... except
, pero ¿hay una forma más pitonica de hacerlo?
¿Puedo preguntar por qué estás utilizando generadores para buscar cosas? –
¿Qué esperas que pase si buscas algo que ya pasaste por alto? ¿Por qué no usar la forma más "pitonica" como 'si yo en a: ...'? –
@Manny D, 'if i in a' no ayuda si desea obtener el índice del elemento encontrado. – senderle