Eliminar elementos de la lista en función de la condición

Tengo una lista de listas: [word, good freq, bad freq, change_status]

 list_1 = [['good',100, 20, 0.2],['bad', 10, 0, 0.0],['change', 1, 2, 2]] 

Me gustaría eliminar de la lista todos los elementos que no cumplan una condición.

Por lo tanto, si change_status > 0.3 and bad_freq < 5 , me gustaría eliminar los elementos correspondientes.

Entonces la lista_1 sería modificada como,

 list_1 = [['good',100, 20, 0.2],['bad', 10, 0, 0.0]] 

¿Cómo hago selectivamente eso?

 list_1 = [['good',100, 20, 0.2],['bad', 10, 0, 0.0],['change', 1, 2, 2]] list_1 = [item for item in list_1 if item[2] >= 5 or item[3] >= 0.3] 

También puede usar if not (item[2] < 5 and item[3] < 0.3) para la condición, si así lo desea.

Utilice la función de filter con una función adecuada.

 list_1 = filter(lambda x: x[3] <= 0.3 and x[2] < 5, list_1) 

Manifestación:

 In [1]: list_1 = [['good',100, 20, 0.2],['bad', 10, 0, 0.0],['change', 1, 2, 2]] In [2]: filter(lambda x: x[3] <= 0.3 and x[2] < 5, list_1) Out[2]: [['bad', 10, 0, 0.0]] 

¡Tenga en cuenta que el bien no satisface su condición ( 20 < 5 es falso) aunque lo haya dicho en su pregunta!


Si tiene muchos elementos, puede usar la función equivalente de itertools:

 from itertools import ifilter filtered = ifilter(lambda x: x[3] <= 0.3 and x[2] < 5, list_1)