检查索引是否在2d列表中[Python]

时间:2015-12-04 12:27:32

标签: python list indexing 2d

我必须写一个函数(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"]]

2 个答案:

答案 0 :(得分:2)

最简单的方法是使用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()

作为determined in 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之间(包括)和电路板中的行数(不包括在内)。然后它返回两个条件是否为真的布尔值。

答案 1 :(得分: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