Я думал, что более или менее разобрался со списками, но потом мне представили эту строку кода из другого вопроса.
Pythonic и эффективный способ поиска соседних ячеек в сетке а>
Я изменил код, чтобы он просто возвращал 8 кортежей, составляющих соседние плитки (при добавлении к нашей текущей плитке).
[(i, j) for i in (-1,0,1) for j in (-1,0,1) if i != 0 or j != 0]
производит:
[(-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 1), (1, -1), (1, 0), (1, 1)]
Утверждение действительно имеет для меня смысл, за исключением последней части, где делается условие:
if i != 0 or j != 0
Если мы пытаемся найти соседние ячейки и хотим опустить ячейку, в которой находимся, не должна ли условная часть читать И вместо ИЛИ?
Нравится:
if i != 0 and j != 0
Вместо этого, если я поставлю AND туда, я верну только эти кортежи:
(-1, -1), (-1, 1), (1, -1), (1, 1)
Просто кажется мне нелогичным.
if i != 0 or j != 0:
эквивалентноif not ( i == 0 and j == 0):
- это немного облегчает понимание того, почему это было написано именно так, в свете приведенного выше комментария @elParaguayo. - person twalberg   schedule 09.01.2015