En Python 2,6 o mejor,
next((i for i, sublist in enumerate(nested_list) if "a" in sublist), -1)
suponiendo por ejemplo, desea un resultado -1
si 'a'
no está presente en ninguna de las sublistas.
Por supuesto que también se puede hacer en versiones anteriores de Python, pero no del todo bien, y ya que no especifica qué versiones de Python le interesan, creo que es mejor usar la última versión de producción uno sólido (simplemente edite su respuesta si necesita especificar otras versiones anteriores de Python).
Editar: por solicitud, permítanme explicar cómo funciona esto. Estoy usando la función incorporada (nueva en 2.6) next, específicamente estoy llamando al next(iterator, default)
: devuelve el siguiente elemento del iterador (y por lo tanto el primero, ya que esta es la primera vez que avanzamos ese iterador), o el valor predeterminado si el iterador está terminado (lo que significa "vacío" si está terminado antes de que lo avancemos ;-). El valor predeterminado es claramente -1
y se devuelve si "a
no está presente en ninguna de las sublistas", lo que significa lo mismo que "el iterador está vacío" en este caso. mirada
Vamos en el iterador nuevo:
(i for i, sublist in enumerate(nested_list) if "a" in sublist)
los paréntesis (redondeado) y for
y if
palabras clave significa que este es un generador de expresión, también conocido por brevedad genexp. i
(el índice) y sublist
(el ítem en ese índice) avanza más de enumerate(nested_list)
- si no tuviéramos enumerate
aquí, entonces no estaríamos haciendo un seguimiento del índice, pero en este caso lo necesitamos. Solo se tienen en cuenta cuando se cumple la cláusula if
, es decir, cuando el elemento que está buscando está presente en la sublista actual.
Así que este genexp produce, uno por vez, cada valor del índice de manera que la sublista en ese índice cumpla la condición "a" in sublist
. Dado que lo estamos utilizando dentro de next
, solo tomamos el primer índice.
El OP podría estar justificado por pensar que un comando mágico haciendo todo esto en tres o cuatro caracteres sería más útil, y así lo haría, para este requisito tan específico, que creo que nunca he visto antes en más de diez años de uso de Python; Sin embargo, si cada uno de esos requisitos específicos tuviese su propia estructura interna especializada, el idioma y los edificios adquiridos serían mayores que el código tributario.En cambio, Python ofrece muchos "bloques de lego" de bajo nivel y algunas formas prácticas de juntarlos, para expresar de forma clara (y razonablemente concisa) la solución a una gran variedad combinatoria de requisitos específicos, como los OP.
Sí: esto da la lista secundaria, mientras que la OP especifica que quieren que el índice del sub-lista, como vuelva en mi respuesta. –