¿Cómo obtengo una lista de índices de elementos distintos de cero en una lista?

Tengo una lista que siempre contendrá solo unos y ceros. Necesito obtener una lista de los índices distintos de cero de la lista:

a = [0, 1, 0, 1, 0, 0, 0, 0] b = [] for i in range(len(a)): if a[i] == 1: b.append(i) print b 

¿Cuál sería la manera ‘pythonica’ de lograr esto?

 [i for i, e in enumerate(a) if e != 0] 

No es realmente una respuesta “nueva”, pero numpy también tiene esto incorporado.

 import numpy as np a = [0, 1, 0, 1, 0, 0, 0, 0] nonzeroind = np.nonzero(a)[0] # the return is a little funny so I use the [0] print nonzeroind [1 3] 

Desde THC4k mencionó la compresa (disponible en python2.7 +)

 >>> from itertools import compress, count >>> x = [0, 1, 0, 1, 0, 0, 0, 0] >>> compress(count(), x)  >>> list(_) [1, 3] 

Solo deseo agregar una explicación para la salida “graciosa” de la respuesta anterior. El resultado es una tupla que contiene vectores de índices para cada dimensión de la matriz. En este caso, el usuario está procesando lo que se considera un vector en números, por lo que la salida es una tupla con un elemento.

 import numpy as np a = [0, 1, 0, 1, 0, 0, 0, 0] nonzeroind = np.nonzero(a) print nonzeroind (array([1, 3]),)