In [4]:
"""
Hola Guillermo! Aquí va mi propuesta. Primero declaramos una matriz de 3x4 para ejemplificar.
El ciclo for sólo es para visualizar la matriz renglón por renglon
"""
A= [["a", "a", "b", "c"],["d", "e", "f", "e"],["c", "a", "b", "e"]]
show(A)
for renglon in A:
    print renglon
['a', 'a', 'b', 'c']
['d', 'e', 'f', 'e']
['c', 'a', 'b', 'e']
In [5]:
"""
vamos a definir una función f que nos ayude a realizar los cambio.
A es la matriz a modificar, x el caracter a reemplazar, y el nuevo caracter,
mientras que i,j son las coordenadas de la entrada. 
Recuerda que en Python/SageMath) empezamos a contar de 0
"""
def f(A,x,y,i,j):
    B=copy(A) #hacemos una copia de A en B para no modificar el arreglo original
    N=len(A) #Como A es una lista de renglones, su longitud es igual al número de renglones
    M=len(A[0]) #Aquí supondré que es un arreglo rectangular, que por tanto, todos los renglones tienen la misma longitud 
                #y esta es igual al número de columnas. Eso debes garantizarlo de alguna manera en Java
    for k in [-1,0,1]: #k denotará los desplazamientos verticales: -1:arriba, 0 mismo renglón, +1: abajo
        if (0<=i+k<=N): #verificamos que no estemos tomando un contador fuera de rango
            for l in [-1,0,1]: #l denotara los desplazamientos horizontales
                if (0<=j+l<=M): #igual que k
                    if not(k==0) or not(l==0): # por último, verificamos que al menos exista un dezplazamiento en algún sentido
                        if (A[i+k][j+l]==x): #ahora sí, si el caracter "x" aparece...
                            B[i+k][j+l]=y #...entonces lo sustituimos                        
    return B
In [6]:
#Aplicamos la función f a B para cambiar las "e" que aparecen alrededor de la casilla 1,2 (contando desde cero) por "g"'s
B=f(A,"e","g",1,2)
show(B)
for renglon in B:
    print renglon
['a', 'a', 'b', 'c']
['d', 'g', 'f', 'g']
['c', 'a', 'b', 'g']
In [ ]: