Quiero escribir algo que elimine un elemento específico de una matriz. Sé que tengo que for
recorrer la matriz para encontrar el elemento que coincida con el contenido.
Digamos que tengo una variedad de correos electrónicos y quiero deshacerme del elemento que coincide con alguna cadena de correo electrónico.
En realidad, me gustaría usar la estructura de bucle for porque también necesito usar el mismo índice para otras matrices.
Aquí está el código que tengo:
for index, item in emails:
if emails[index] == '[email protected]':
emails.pop(index)
otherarray.pop(index)
list.remove(x)
?Respuestas:
No necesita iterar la matriz. Sólo:
Esto eliminará la primera ocurrencia que coincida con la cadena.
EDITAR: después de su edición, aún no necesita repetir. Solo haz:
fuente
Usar
filter()
ylambda
proporcionaría un método claro y conciso para eliminar valores no deseados:Esto no modifica los correos electrónicos. Crea la nueva lista newEmails que contiene solo elementos para los que la función anónima devolvió True.
fuente
Su bucle for no es correcto, si necesita el índice en el uso del bucle for:
En su caso, la solución de Bogdan está bien, pero su elección de estructura de datos no es tan buena. Tener que mantener estas dos listas con datos de uno relacionado con datos del otro en el mismo índice es torpe.
Una lista de tupple (correo electrónico, otros datos) puede ser mejor, o un dict con correo electrónico como clave.
fuente
La forma más sensata de hacerlo es usar
zip()
una Lista de comprensión / Expresión de generador:Además, si no está utilizando
array.array()
onumpy.array()
, lo más probable es que esté utilizando[]
olist()
, lo que le proporciona listas, no matrices. No es lo mismo.fuente
Hay una solución alternativa a este problema que también trata con coincidencias duplicadas.
Comenzamos con 2 listas de igual longitud:
emails
,otherarray
. El objetivo es eliminar elementos de ambas listas para cada índicei
dondeemails[i] == '[email protected]'
.Esto se puede lograr utilizando una lista de comprensión y luego dividiendo a través de
zip
:fuente