簡體   English   中英

在 Python 的 for 循環中使用 range(len(x)) 時添加索引有什么影響? 例如范圍(len(x [0])

[英]What is the effect of adding an index when using range(len(x)) in a for loop in Python? e.g. range(len(x[0])

我對編碼很陌生,並且正在使用 Python。 在在線課程中,我正在創建一個 minimax function 來嘗試對 AI 進行編程以玩 Connect 4。以下代碼構成了評估 function 以計算玩家“X”和玩家“O”是否有任何“兩條條紋”(在一個方向)通過計算,給定板上的 position,其右側列中的部件是否具有相同的符號。

def my_evaluate_board(board):
  if has_won(board, "X"):
    return float("Inf")
  elif has_won(board, "O"):
    return -float("Inf")
  else:
    x_two_streak = 0
    o_two_streak = 0
    for col in range(len(board)-1):
      for row in range(len(board[0])):
        if board[col][row] == "X" and board[col + 1][row] == "X":
          x_two_streak += 1
    for col in range(len(board)-1):
      for row in range(len(board[0])):
        if board[col][row] == "O" and board[col + 1][row] == "O":
          o_two_streak += 1
    return x_two_streak - o_two_streak

我明白在 for 循環中:

for col in range(len(board)-1):

-1 就位是因為代碼正在尋找每列的右側以連續查找兩個部分,這可以防止循環嘗試查找最后一列的右側。

我不明白為什么在下一行代碼中添加索引正在做它正在做的事情:

for row in range(len(board[0])):

在我的腳本的其他地方,我打印了這一行的 output,有無索引,但無論我放什么索引,我都會得到相同的結果。 該板有 7 列,每列有 6 行。 見下文:

print(range(len(new_board[0])))
# this returns: range(0, 6)

print(range(len(new_board)))
# this prints: range(0, 7)

並證明我對指數價值沒有任何影響的意思:

print(range(len(new_board[4])))
# this prints: range(0, 6)

我想這樣做的目的是減少 function 循環通過行的次數 1,因為行比列少 1。

請有人解釋為什么在 for 循環中添加索引會使 function 表現得這樣嗎?

看起來您的數據被組織為一個矩陣,在這種情況下,它被實現為一個列表列表。 這意味着 board 的每個元素都是代表一列的列表。 列的長度表示矩陣的行數。 每列將具有相同的長度,因此您可以選擇其中任何一個來查找行數。 最佳選擇是第一列(索引為 [0] 的列)。

為了更清楚,你可以使用

n_cols = len(board)
n_rows = len(board[0])

並將你的循環重寫為

for row_index in range(n_rows):
    for column_index in range(n_cols):

嘗試更好地理解這種結構,您可以創建自己的樣本矩陣

l = [[1, 2, 3], [4, 5, 6]]

因此您創建了一個形狀為 2x3 的矩陣

print(len(l))

將返回 2,而

print(l[0])
print(l[1])

將返回 [1,2, 3] 和 [3, 4, 5]。 它們每個的長度為 3(因此print(len(l[0])print(len(l[1])都將返回 3)。可視化矩陣的更好方法是將其轉換為 numpy 數組

import numpy
print(numpy.array(l))

將以更熟悉的形狀向您展示矩陣

[[1 2 3]
 [2 3 4]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM