Necesito poder buscar una letra y almacenar sus coordenadas en dos variables diferentes. Todos los métodos que he encontrado pueden encontrar con éxito el valor, pero no mencionan nada sobre las coordenadas.

TAP_CODE = [['A', 'B', 'C', 'D', 'E'],
            ['F', 'G', 'H', 'I', 'J'],
            ['L', 'M', 'N', 'O', 'P'],
            ['Q', 'R', 'S', 'T', 'U'],
            ['V', 'W', 'X', 'Y', 'Z']]

La idea es convertir las coordenadas en una cadena de puntos separados por un espacio que indique el código de tap. Ej: '.. ...' para H, '.... ..' para R

0
Prof Plum 10 dic. 2015 a las 19:03

5 respuestas

La mejor respuesta

Esta es un forma de hacerlo:

>>> TAP_CODE = [['A', 'B', 'C', 'D', 'E'],
            ['F', 'G', 'H', 'I', 'J'],
            ['L', 'M', 'N', 'O', 'P'],
            ['Q', 'R', 'S', 'T', 'U'],
            ['V', 'W', 'X', 'Y', 'Z']]

>>> def f(l, ch):
    for i,sub_list in enumerate(l):
        if ch in sub_list:
            print ('.'*(i+1),' ', '.'*(sub_list.index(ch)+1))

>>> f(TAP_CODE, 'H')
..   ...
>>> f(TAP_CODE, 'R')
....   ..
0
Iron Fist 10 dic. 2015 a las 16:18

Cómo lo manejaría ...

En python 3.5

def dots(matrix, target):
    for i in range(len(matrix[0])):
        for t in range(len(matrix[1])):
            if TAP_CODE[i][t] == target:
                coords = (i+1,t+1)
    for i in range(coords[0]):
        print('.', end="")

    print(' ', end="")
    for t in range(coords[1]):
        print('.', end="")


dots(TAP_CODE, 'H')

Salida

.. ...

Tal vez no sea la forma más pitónica , sino una forma de abordarlo sin introducir nada innecesario, lo que creo mantiene las cosas sin ambigüedades: ^)

0
Kanga_Roo 7 ene. 2016 a las 16:36

Esta es otra forma de hacerlo:

def get_coordinates(letter):
  for i in range(len(TAP_CODE)):
    if letter in TAP_CODE[i]:
      x = i
      y = TAP_CODE[i].index(letter)
  return x, y

>>> get_coordinates('M')
(2, 1)

Agregue +1 a x e y dentro de la función si no desea usar 0 como índice.

0
Javitronxo 10 dic. 2015 a las 16:16

Esto es bastante simple si convierte su TAP_CODE en un numpy.ndarray. Luego puede usar np.where para encontrar las coordenadas:

In [15]: TAP_CODE = np.array([['A', 'B', 'C', 'D', 'E'],
        ['F', 'G', 'H', 'I', 'J'],
        ['L', 'M', 'N', 'O', 'P'],
        ['Q', 'R', 'S', 'T', 'U'],
        ['V', 'W', 'X', 'Y', 'Z']])

In [16]: np.where(TC=='R')
Out[16]: (array([3]), array([1]))
1
tmdavison 10 dic. 2015 a las 16:15

Puede hacer esto atravesando TAP_CODE. Por el bien de este ejemplo, supongamos que está buscando el carácter 'H'.

desired = 'H'
xCord,yCord = -1,-1 # placeholder values
for y in range(len(TAP_CODE)): # traverse through all lists
    for x in range(len(TAP_CODE[y]): # traverse through all elements in all lists
        if(TAP_CODE[y][x] == desired): # if element is what I want
            xCord, yCord = x,y

El único problema es que, por ejemplo, si buscamos 'A' y sus coordenadas son (1,1), esto devolverá (0,0), porque las listas comienzan en 0. Puede remediar esto agregando 1 a ambos xCord y luego después de haberlos encontrado.

xCord += 1
yCord += 1

Si desea convertir xCord e yCord a sus longitudes en períodos, puede usar esto:

example = 5
exampleString = "." * example
print(exampleString) -> "....."

Espero que esto ayude al profesor Plum. ¡Buena suerte!

0
Muadh Ghuneim 10 dic. 2015 a las 16:20
34206449