我想遍歷一個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
。
我想遍歷一個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
。
好,列表理解就像你嵌套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]
據我所知,你想在'棋盤'上的黑色方塊的x和y座標顯式表達,所以你不要必須評估每個正方形的布爾值。這是我的解決方案的實現(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
會記錄行號是偶數還是奇數;奇數行相對於偶數行具有「偏移量」。
如果你想處理任意數量的軸,查看'itertools.product',但請注意*「任何想法?」*不是一個好的SO問題。 – jonrsharpe