在2d列表中查找搜索值的坐标

时间:2015-12-10 16:03:13

标签: python python-3.x

我需要能够搜索一个字母并将其存储在两个不同的变量中。我找到的所有方法都可以成功找到值,但是他们没有提到有关坐标的任何信息。

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']]

我们的想法是将坐标转换为由空格分隔的一串点,这些点用于指示抽头代码。例如:' .. ...'对于H,' .... ..'对于R

5 个答案:

答案 0 :(得分:1)

如果您将TAP_CODE变成numpy.ndarray,这非常简单。然后,您可以使用np.where查找坐标:

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 :(得分:0)

这是一种方法:

>>> 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')
....   ..

答案 2 :(得分:0)

这是另一种方法:

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)

如果您不想使用0作为索引,请在函数内添加+1到x和y。

答案 3 :(得分:0)

我如何处理它......

在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')

输出

.. ...

也许不是最常见的 pythonic 方式,而是一种接近它的方式,而不会引入任何不必要的东西,我认为这样可以保持一致:^)

答案 4 :(得分:0)

您可以通过遍历TAP_CODE来完成此操作。为了这个例子,我们假设你正在搜索角色' 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

唯一的问题是,例如,如果我们搜索A'并且其坐标为(1,1),则返回(0,0),因为列表从0开始。您可以通过在找到它们之后向xCord和yCord添加1来解决这个问题。

xCord += 1
yCord += 1

如果您想将xCord和yCord转换为句点长度,可以使用:

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

我希望这有助于Plum教授。祝你好运!