2016-07-03 3 views
-6

я хотел бы перебрать любой другой элемент mn «матрицы с размерностью шахматной доски», то есть,Iterate над каждым черным квадратом «шахматной доской»

l = [] 
for i in range(m): 
    for j in range(n): 
     if (i+j) % 2 == 0: 
      l.append(something(i, j)) 

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

Любые подсказки?

Для бонусных очков решение также работает для i, j, k с (i+j+k) % 2 == 0.

+1

Если вы хотите обрабатывать произвольное количество осей, посмотрите на 'itertools.product', но обратите внимание, что *« любые идеи? »* Не является хорошим вопросом SO. – jonrsharpe

ответ

2

Ну, список понимание только как ваш вложенной for цикла, за исключением того, что это делается в в список скобки:

my_list = [something(i, j) for i in range(m) for j in range(n) if (i + j) % 2 == 0] 

В целом, для n вложенных циклов, вы можете использовать itertools.product, как это :

from itertools import product 

my_list = [something(*p) for p in product(range(n), repeat=n) if sum(p) % 2 == 0] 
0

Как я понимаю, вы хотели бы получить явное выражение для й и у координаты черных квадратов на «шахматной доске», так что вы не должны оценивать логическое значение для каждого квадрата. Вот реализация моего решения (для 2-мерной доски):

import numpy as np 

# 'Chess board' dimension 
m = 3  # Number of columns 
n = 4  # Number of rows 

# Counter variable. The length of this array is equal to the total number of black squares. 
k = np.arange(0,m*n,2) 

x_coords = (k + (k/n) % 2) % n  # x-coordinates of black squares 
y_coords = (k + (k/n) % 2)/n  # y-coordinates of black squares 

print("x-coordinates: "+str(x_coords)) 
print("y-coordinates: "+str(y_coords)) 

Для 3х4 размерной платы в приведенном выше примере, это генерирует следующий вывод:

x-coordinates: [0 2 1 3 0 2] 
y-coordinates: [0 0 1 1 2 2] 

, которые можно проверить рисуя небольшую диаграмму. Обратите внимание, что «вспомогательная переменная» (k/n) % 2 отслеживает, является ли номер строки четным или нечетным; нечетные строки имеют «смещение» относительно четных.

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