簡體   English   中英

檢查索引是否在二維列表中 [Python]

[英]Check if index is inside 2d list [Python]

我必須編寫一個函數 (def) 來檢查我編寫的索引是否在 2d 列表中。 如果是,則必須返回 True,否則必須返回 False。

def height(board):
    height=0
    for x in board:
        height+=1
    return height

def width(board):
    wid=len(board[0])
    return wid

def on_board(board, x, y):
    check=False
    x1 = int(x)
    y1 = int(y)
    for x,y in board:
        if x1 > height(board) or y1 > width(board):
            check=False
    else:
        check=True
    return check

列表看起來像這樣:

board = [["V1", "V1"],
         ["V2", "V2"],
         ["V3", "V3"]]

最簡單的方法是使用try..except..else ,它將嘗試訪問板上的那個位置。 如果它有效,它是一個有效的位置,並且將進入else塊。 如果不是,則不是,並且將進入except塊。 作為獎勵,您還可以檢查xy是否為有效整數。 這里的任何失敗都會產生False

def on_board(board, x, y):
    try:
        board[int(x)][int(y)]
    except (ValueError, IndexError):
        return False
    else:
        return True

此外,板的高度只是def height(board): return len(board) 但是如果你只有height()width()用於on_board() ,那么你根本不需要height()width()

正如在 chat 中確定的那樣,正在檢查您的程序的測試套件與我們一樣使用 0 索引行和列,但第一個值是列(就像圖表上的 x 坐標),第二個值是行。 它也不接受-1索引供用戶指示最后一行/列。 最后,它已經用整數測試了函數,所以不需要用int()

def on_board(board, x, y):
    return x in range(len(board[0])) and y in range(len(board))

這將檢查x是否在0 (含)和一行中的列數(非含)之間,以及y是否在0 (含)和板中的行數(不含)之間。 然后它返回這兩個條件是否都為真的布爾值。

你可以使用你寫的兩種方法,然后你的on_board方法可以簡單地檢查那些

def height(board):
    return len(board)

def width(board):
    return len(board[0])

def on_board(board, x, y):
    return x < width(board) and y < height(board)

例如

>>> board = [["V1", "V1"],
             ["V2", "V2"],
             ["V3", "V3"]]
>>> on_board(board, 1, 0)
True
>>> on_board(board, 3, 4)
False

暫無
暫無

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

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