Parece que está confundiendo list comprehension con looping constructs en Python.
¡Una lista de comprensión produce - una lista! No se presta a una sola tarea en una lista existente. (Aunque puede torturar la sintaxis para hacer eso ...)
Si bien no está exactamente claro lo que está tratando de hacer con su código, creo que es más similar al bucle sobre la lista (control de flujo) vs producir una lista (lista por comprensión)
bucle sobre la lista como esta:
for pattern in patterns:
if lst[0] == pattern: lst[0]=''
Esa es una forma razonable de hacer esto, y es lo que haría en C, Pascal, etc, pero se también puede simplemente probar la lista para el único valor y cambiarlo:
if lst[0] in patterns: lst[0] = ''
O, si usted no sabe el índice:
i=lst.index[pattern]
lst[i]=''
o, si usted tiene una lista de listas y desea cambiar cada primer elemento de cada sublista:
for i, sublst in enumerate(lst):
if sublst[i][0] in patterns: sublist[i][0]=''
etc, etc., etc.
Si desea aplicar algo a cada elemento de una lista, puede usar una lista de comprensión, un mapa o una de las muchas herramientas del kit de Python.
En lo personal, por lo general tienden a utilizar las listas por comprensión más para la creación de la lista:
l=[[ x for x in range(5) ] for y in range(4)] #init a list of lists...
¿Qué es más natural que:
l=[]
for i in range(4):
l.append([])
for j in range(5):
l[i].append(j)
Sin embargo, para modificar esa misma lista de listas, que es más ¿comprensible?
Este:
l=[['new value' if j==0 else l[i][j] for j in range(len(l[i]))] for i in range(len(l))]
o esto:
for i,outter in enumerate(l):
l[i][0]='new value'
YMMV
Here es un gran tutorial sobre esto.
Creo que tiene esto dentro ... – dawg
Esto no es muy claro. Esa es una señal de advertencia inmediata. –