Возврат всех «позиций» списка - PullRequest
1 голос
/ 18 января 2011

У меня есть список с «a» и «b», а «b» - это что-то вроде пути, а «a» - это стены.Я пишу программу для составления графика всех возможных ходов.Я запустил код, чтобы проверить первые «b» на возможные ходы, но у меня НЕТ идеи, как я собираюсь найти все «b», тем более проверяю их все без повторения.

Основная проблема imИмея получает координаты кортежа "b" из списка.

Любые указатели / советы?

Ответы [ 3 ]

2 голосов
/ 18 января 2011
grid = [['b','a','b'],['b','b','b'],['a','a','a']
results = []
for row in range(len(grid)):
  for col in range(len(grid[row])):
    if grid[row][col] == 'b':
      results.append((row, col))

print results

Вероятно, есть какой-то лучший способ сделать это с помощью карт, но прошло некоторое время, так как я использовал Python.

1 голос
/ 18 января 2011

+ 1 к Nemo157 за его ответ. Если вам нужен точно такой же код, но в одной строке, это можно сделать следующим образом:

grid = [['b','a','b'],['b','b','b'],['a','a','a']
[(row, col) for row in range(len(grid)) for col in range(len(grid[row])) if grid[row][col] == 'b']

Ура! * * 1004

0 голосов
/ 18 января 2011

Находит список допустимых ходов из каждого квадрата.

Я предполагаю, что за краем карты находится "стена", и что вы не можете двигаться по диагонали:

# reference like this: maze[y][x] or maze[row][col]
# with [0][0] starting at the top left
maze = [['b','a','a', 'a'],
        ['b','a','b', 'a'],
        ['b','a','b', 'b'],
        ['b','b','b', 'a'],
        ['b','a','b', 'a'],
        ['a','a','a', 'a']]

moves = {}

# Loop through all cells of the maze, starting in the top-left
for y, row in enumerate(maze):
    for x, value in enumerate(row):
#        print "y, x, val: ", y, x, value
        # for every cell, create an empty list of moves
        moves[y, x] = []
        # then if we can move from this cell
        # check each of its neighbours and if they are a 'b' add it 
        # to the list of moves - assumes we can't move diagonally
        if value == 'b':
            if y - 1 > 0 and maze[y - 1][x] == 'b':
                moves[y, x].append((y - 1, x))
            if y + 1 < len(maze) and maze[y + 1][x] == 'b':
                moves[y, x].append((y + 1, x))
            if x - 1 > 0 and maze[y][x - 1] == 'b':
                moves[y, x].append((y, x - 1))
            if x + 1 < len(row) and maze[y][x+1] == 'b':
                moves[y, x].append((y, x+1))

print moves
...