我希望迭代m
的所有其他元素 - by - n
"棋盘",即
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
。
答案 0 :(得分: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]
答案 1 :(得分:0)
根据我的理解,你想要一个明确的表达式,用于棋盘上的黑色方块的x和y坐标,这样你就不必评估布尔值了每个广场。这是我的解决方案的实现(对于二维板):
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))
对于上例中的3x4维板,会生成以下输出:
x-coordinates: [0 2 1 3 0 2]
y-coordinates: [0 0 1 1 2 2]
您可以通过绘制一个小图来验证。请注意'帮助变量' (k/n) % 2
跟踪行号是偶数还是奇数;奇数行有一个'偏移'就偶数而言。