Python – Coordenadas adyacentes en dimensión N

A veces, mientras trabajamos con Python Matrix, podemos tener un problema en el que necesitamos extraer todas las coordenadas adyacentes de la coordenada dada. Este tipo de problema puede tener aplicación en muchos dominios, como el desarrollo web y la programación escolar. Vamos a discutir cierta forma en que se puede realizar esta tarea.

Entrada : test_tup = (1, 2, 3)
Salida : [[0, 1, 2], [0, 1, 3], [0, 1, 4], [0, 2, 2], [0, 2 , 3], [0, 2, 4], [0, 3, 2], [0, 3, 3], [0, 3, 4], [1, 1, 2], [1, 1, 3 ], [1, 1, 4], [1, 2, 2], [1, 2, 3], [1, 2, 4], [1, 3, 2], [1, 3, 3], [1, 3, 4], [2, 1, 2], [2, 1, 3], [2, 1, 4], [2, 2, 2], [2, 2, 3], [2 , 2, 4], [2, 3, 2], [2, 3, 3], [2, 3, 4]]
Entrada : test_tup = (5, 6)
Salida : [[4, 5], [4 , 6], [4, 7], [5, 5], [5, 6], [5, 7], [6, 5], [6, 6], [6, 7]]

Método: Usar recursividad +yield
La combinación de las funcionalidades anteriores se puede usar para resolver este problema. En esto, extraemos los elementos dinámicamente usando yield para las coordenadas alrededor de la coordenada de consulta y usando recursividad, proceso para la siguiente columna y fila.

# Python3 code to demonstrate working of 
# Adjacent Coordinates in N dimension
# Using recursion + yield
  
# helper_fnc
def adjac(ele, sub = []):
  if not ele:
     yield sub
  else:
     yield from [idx for j in range(ele[0] - 1, ele[0] + 2)
                for idx in adjac(ele[1:], sub + [j])]
  
# initializing tuple
test_tup = (3, 4)
  
# printing original tuple
print("The original tuple : " + str(test_tup))
  
# Initialize dictionary keys with Matrix
# Using deepcopy()
res = list(adjac(test_tup))
  
# printing result 
print("The adjacent Coordinates : " + str(res)) 
Producción :

The original tuple : (3, 4)
The adjacent Coordinates : [[2, 3], [2, 4], [2, 5], [3, 3], [3, 4], [3, 5], [4, 3], [4, 4], [4, 5]]

Publicación traducida automáticamente

Artículo escrito por manjeet_04 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *