2010-01-14 9 views

Respuesta

11

Sin duda, un caso para una lista por comprensión:

m = [row for row in l if 'a' in row[0]] 

Aquí estoy tomando el "tener 'a' en el primer elemento", literalmente, de ahí el uso del operador in. Si desea restringir esto a "tener 'a' como el primer elemento" (una cosa muy diferente de lo que realmente escribió -!), Entonces

m = [row for row in l if 'a' == row[0]] 

es más como él ;-).

1
m = [i for i in l if i[0] == 'a'] 
0

Con la función filter:

m = filter(lambda x: x[0] == 'a', l) 

o como una lista de comprensión:

m = [x for x in l where x[0] == 'a'] 
0

Qué le pasa a solo:

m = [i for i in l if i[0] == 'a'] 

O:

m = filter(lambda x: x[0] == 'a', l) 

Dudo que la diferencia entre estos sea significativa en cuanto al rendimiento. Use el que sea más conveniente. No me gusta lambda s, pero el filter puede reemplazarse con itertools.ifilter para listas más grandes si eso es un problema, pero también puede cambiar la comprensión de la lista a un generador (cambie [] a ()) para lograr el mismo resultado general. Aparte de eso, probablemente sean idénticos.

Cuestiones relacionadas