Tengo una matriz:

 a = [[(1,2), (3,4)], [(4,5),(3,4)]]
 # Stores list of x,y coordinates

Y una matriz:

 b = [(1,2), (3,4)]

Ahora, quiero reemplazar en a donde tiene un equivalente de b con la coordenada y + 2.

Como aquí a tiene un equivalente de b en:

[(1,2), (3,4)]

Quiero reemplazar en a de modo que se convierta en:

a = [[(1,4), (3,6)], [(4,5),(3,4)]]

¿Cómo podría hacer esto?

Sé que existe un método con numpy tal que:

np.where(a == b) , do something;

Pero no estoy segura de cómo podría usarlo en este caso.

1
Amanda 2 oct. 2019 a las 14:17

3 respuestas

La mejor respuesta

Con numpy

a[(a==b).all(1).all(1),:,1] +=2
1
splash58 2 oct. 2019 a las 12:06

main ():

def main():
    a = [[(1, 2), (3, 4)], [(4, 5), (3, 4)]]
    b = [(1, 2), (3, 4)]

    for i, el in enumerate(a):
        if el == b:
            temp = []
            for x in el:
                c = (x[0], x[1]+2)
                temp.append(c)

            a[i] = temp
    print(a)

salida:

[[(1, 4), (3, 6)], [(4, 5), (3, 4)]]
0
Ronak Patel 2 oct. 2019 a las 14:00

No estoy seguro acerca de una buena solución en numpy para esto, pero puede ir con la comprensión de la lista en su lugar:

>>> a
[[(1, 2), (3, 4)], [(4, 5), (3, 4)]]
>>> b
[(1, 2), (3, 4)]
>>> c=[[(el_inner[0], el_inner[1]+2) for el_inner in el] if el==b else el for el in a ]
>>> c
[[(1, 4), (3, 6)], [(4, 5), (3, 4)]]
1
Grzegorz Skibinski 2 oct. 2019 a las 11:38
58200401