В то время как список-постижения часто являются хорошим способом создания единого списка, вам придется проходить через всю матрицу несколько раз, чтобы найти позиции всех возможных значений чипа. Кроме того, можно создавать списки из которых пространства, занятые каждого вида чипа в один проход через матрицу, делая что-то вроде следующего:
matrix = [[1,1,1,1,1,0,0,0,0,0], [1,1,1,1,0,0,0,0,0,0],
[1,1,1,0,0,0,0,0,0,0], [1,1,0,0,0,0,0,0,0,0],
[1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,2],
[0,0,0,0,0,0,0,0,2,2], [0,0,0,0,0,0,0,2,2,2],
[0,0,0,0,0,0,2,2,2,2], [0,0,0,0,0,2,2,2,2,2]]
positions = {}
for y in xrange(len(matrix)):
for x in xrange(len(matrix)):
positions.setdefault(matrix[y][x], []).append((y, x))
# show the all positions of each chip value
for chip in sorted(positions):
print('{}: {}'.format(chip, positions[chip]))
Выходные:
0: [(0, 5), (0, 6), (0, 7), (0, 8), (0, 9), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9), (2, 3), (2, 4), (2, 5), (2, 6), (2, 7), (2, 8), (2, 9), (3, 2), (3, 3), (3, 4), (3, 5), (3, 6), (3, 7), (3, 8), (3, 9), (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (4, 6), (4, 7), (4, 8), (4, 9), (5, 0), (5, 1), (5, 2), (5, 3), (5, 4), (5, 5), (5, 6), (5, 7), (5, 8), (6, 0), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6), (6, 7), (7, 0), (7, 1), (7, 2), (7, 3), (7, 4), (7, 5), (7, 6), (8, 0), (8, 1), (8, 2), (8, 3), (8, 4), (8, 5), (9, 0), (9, 1), (9, 2), (9, 3), (9, 4)]
1: [(0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (3, 0), (3, 1), (4, 0)]
2: [(5, 9), (6, 8), (6, 9), (7, 7), (7, 8), (7, 9), (8, 6), (8, 7), (8, 8), (8, 9), (9, 5), (9, 6), (9, 7), (9, 8), (9, 9)]
Эй спасибо, что очень полезно , Могу я задать вам еще один вопрос, если вы не возражаете? Причина, по которой мне нужен список местоположений чипов, заключается в том, чтобы ввести их в другую функцию, которая найдет все возможные пьесы, которые вы можете сделать с указанным чипом. Мои функции принимают два параметра, координату x и координату y, которые вы хотите найти. Причина, по которой я хотел, чтобы расположение чипов внутри списка состояло в том, чтобы я мог использовать цикл для повторения всех позиций и поиска всех возможных шагов для всех фишек. Есть ли что-нибудь сделать? –
@SirAskALot Если вы просто хотите найти возможные ходы для одного набора фишек, вы можете сделать '[find_plays (y, x) для y in ...]' вместо того, чтобы просто вернуть координату. Для лучшего ответа мне нужно знать возвращаемое значение 'find_plays' и то, как вы хотите сохранить результат. – niemmi
Значение, возвращаемое моей функцией, представляет собой список возможных координат, к которым вы можете перейти. В моей функции я определил пустой список и добавляет все возможные шаги. Игра похожа на шашки, только вы можете двигаться по всем направлениям, поэтому я проверяю все смежные координаты и сохраняю только координаты, которые имеют 0 в качестве значения. Однако у меня есть еще одна функция для прыжков, если пространство прямо рядом с вами заполнено, но пространство после этого пространства пуст, вы можете прыгать поверх чипа. Функция для прыжков работает в том же порядке, что и функция базового перемещения. –