2016-01-16 1 views
0

Предположим, у меня есть матрица как список map, где я храню некоторые объекты. Теперь, как работает список, map[x-1] дает в map[elemInList-1]. Помимо ручной настройки границ x, как если бы x < 0, есть ли другие способы обхода?Как использовать список, чтобы заставить IndexError?

Это то, что я пытался

for x in range(row): 
    for y in range(col): 
     try: 
      print "trying left", map[x][y - 1] 
      map[x][y].neighbors.append(map[x][y - 1]) 
     except IndexError: 
      pass 

Пример:

a b c d e 
f g h i j 
k l m n o 

То, что я пытаюсь сделать это, сопоставьте соседние элементы из каждой позиции. Поэтому для каждой позиции я пытаюсь добавить позиции слева, справа, вверх и вниз. Теперь предположим, что я нахожусь в [1][0] (F) и пытаюсь проверить, существует ли что-либо для его левого. [1] [0 - 1] будет указывать на j, чего я не делаю.

+3

Только примечание: вы должны использовать 'map' в качестве имени переменной, потому что вы затенения встроенный [' map'] (https://docs.python.org/2/library/functions.html #map) функция. – Delgan

+2

Я честно не понимаю, что вы пытаетесь сделать. Попытайтесь сделать свою мысль немного более ясной и предложите пример, который люди здесь могут использовать. –

+0

@ Jim. уточнение добавлено – Roy

ответ

1

Это то, что вы ищете?

grid = [list('abcde'), list('fghij'), list('klmno')] 
print grid 

neigh = [(-1,0), (0,-1), (1,0), (0,1)] 
nrows, ncols = 3, 5 
for i in range(nrows): 
    for j in range(ncols): 
     print 'neighbours of', grid[i][j], ':', 
     for (dj, di) in neigh: 
      ni, nj = i + di, j + dj 
      if not (0 <= ni < nrows and 0 <= nj < ncols): 
       continue 
      print grid[ni][nj], 
     print 

neighbours of a : b f 
neighbours of b : a c g 
neighbours of c : b d h 
neighbours of d : c e i 
neighbours of e : d j 
neighbours of f : a g k 
neighbours of g : f b h l 
neighbours of h : g c i m 
neighbours of i : h d j n 
neighbours of j : i e o 
neighbours of k : f l 
neighbours of l : k g m 
neighbours of m : l h n 
neighbours of n : m i o 
neighbours of o : n j 
+0

Мне было интересно, если бы можно было избежать ограничений 'if not' (как в некоторых встроенных механизмах python или sth). Но ваш ответ помог мне увидеть очень аккуратный способ сделать это :) – Roy

+0

@Roy - рад, что это помогло! Возможно, вы захотите добавить свое собственное решение в качестве ответа. – xnx

 Смежные вопросы

  • Нет связанных вопросов^_^