Tengo dos matrices que necesito comparar para eliminar ciertos elementos. Mi problema es que comparar elementos de la matriz para asegurarme de que sean iguales es fácil, pero ¿cómo me aseguro de que dos elementos no sean iguales?

for e in is_And_Should_Be: #delete who shouldn't be here
    for l in USERS:
        if (is_And_Should_Be[e] == USERS[l]):
            current = USERS[l]
            proc = Popen(['deluser', current],stdin=PIPE,stdout=PIPE,stderr=PIPE)
            if proc.returncode == 0:
                print "%s deleted" % current

Si tuviera a Steve, Dan y John que deberían estar allí y Dan, Steve y Satanás que ya estaban allí, ¿cómo podría asegurarme de que solo se eliminara a Satanás, porque mi solución (o más bien el dilema) habría eliminado a Dan? Gracias por adelantado.

1
chevydog 12 ene. 2017 a las 05:38

3 respuestas

La mejor respuesta

Mi recomendación es utilizar los sets de Python y encontrar la diferencia:

is_and_should_be = ['Steve', 'Dan', 'John']
users = ['Steve', 'Dan', 'Satan']
deletables = set(users).difference(set(is_and_should_be))
for user_to_delete in deletables:
    users.remove(user_to_delete)

En lo anterior, supongo que está utilizando Python lists, en lugar de arrays.

2
GreenMatt 12 ene. 2017 a las 04:02

Puede hacer lo siguiente (suponiendo que esta sea la lista de ejemplos de USUARIOS que mencionó:

USERS = ["Steve", "Dan", "John", "Dan", "Steve", "Satan"]
while "Satan" in USERS:
    USERS.remove("Satan")
print USERS
['Steve', 'Dan', 'John', 'Dan', 'Steve']
0
gom1 12 ene. 2017 a las 02:45

master_list = ["Steve", "Dan", "John", "Satan"]

desired_list = ["Steve", "Dan", "John"]

unwanted_user = [name for name in master_list if not name in desired_list]

print(unwanted_user)

['Satán']

master_list.remove(unwanted_user[0])

print(master_list)

['Steve', 'Dan', 'John']

0
QP1 12 ene. 2017 a las 03:38