Cómo eliminar elementos específicos de una matriz usando python

Quiero escribir algo que elimine un elemento específico de una matriz. Sé que tengo que recorrer la matriz para encontrar el elemento que coincida con el contenido.

Digamos que tengo una serie de correos electrónicos y quiero deshacerme del elemento que coincide con alguna cadena de correo electrónico.

Realmente 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] == 'something@something.com': emails.pop(index) otherarray.pop(index) 

No necesitas iterar la matriz. Sólo:

 >>> x = ['ala@ala.com', 'bala@bala.com'] >>> x ['ala@ala.com', 'bala@bala.com'] >>> x.remove('ala@ala.com') >>> x ['bala@bala.com'] 

Esto eliminará la primera aparición que coincida con la cadena.

EDITAR: Después de su edición, todavía no necesita repetir. Solo haz:

 index = initial_list.index(item1) del initial_list[index] del other_list[index] 

El uso de filter() y lambda proporcionaría un método claro y conciso para eliminar valores no deseados:

 newEmails = list(filter(lambda x : x != 'something@something.com', emails)) 

Esto no modifica los correos electrónicos. Crea la nueva lista newEmails que contiene solo elementos para los cuales la función anónima devolvió True.

La manera sensata de hacer esto es usar zip() y una Expresión de Comprensión / Generador de Lista:

 filtered = ( (email, other) for email, other in zip(emails, other_list) if email == 'something@something.com') new_emails, new_other_list = zip(*filtered) 

Además, si no estás usando array.array() o numpy.array() , lo más probable es que estés usando [] o list() , que te dan listas, no Arrays. No es lo mismo.

Su bucle for no es correcto, si necesita el índice en el uso del bucle for:

 for index, item in enumerate(emails): # whatever (but you can't remove element while iterating) 

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 una relacionada con datos de la otra en el mismo índice es torpe.

Una lista de tupple (correo electrónico, otros datos) puede ser mejor, o un dictado con correo electrónico como clave.

Existe una solución alternativa a este problema que también se ocupa de las coincidencias duplicadas.

Comenzamos con 2 listas de igual longitud: emails , otherarray . El objective es eliminar elementos de ambas listas para cada índice i donde los emails[i] == 'something@something.com' .

Esto se puede lograr utilizando una lista de comprensión y luego dividiendo a través de zip :

 emails = ['abc@def.com', 'something@something.com', 'ghi@jkl.com'] otherarray = ['some', 'other', 'details'] from operator import itemgetter res = [(i, j) for i, j in zip(emails, otherarray) if i!= 'something@something.com'] emails, otherarray = map(list, map(itemgetter(0, 1), zip(*res))) print(emails) # ['abc@def.com', 'ghi@jkl.com'] print(otherarray) # ['some', 'details']