【问题标题】:Check if index is inside 2d list [Python]检查索引是否在二维列表内 [Python]
【发布时间】:2015-12-04 12:27:32
【问题描述】:

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

【问题讨论】:

    标签: python list indexing 2d


    【解决方案1】:

    最简单的方法是使用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(含)和行数之间董事会(不包括在内)。然后它返回布尔值以判断这两个条件是否为真。

    【讨论】:

    • 作为建议,OP 可以创建一个Board 类并在其中封装其中的一些细节。
    • 我得到这个错误:board[int(x)][int(y)] IndexError: list index out of range
    • 我不得不编辑:除了 ValueError,IndexError 到:除了 ValueError 作为 IndexError。因为:“Python 3.4 版不支持这种语法。”
    • elf.assertTrue(on_board(board, 1, 2)) AssertionError: False is not true 尽管如此,我还是得到了这个错误..
    • 嗯,是的。从您的问题文本中:“检查我写的索引是否在 2d 列表中”。 [1][2] 的索引不在板内。您的测试套件是否使用 1 索引板?
    【解决方案2】:

    你可以使用你写的两种方法,然后你的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
    

    【讨论】:

    • 我得到这个错误:AssertionError: True is not false
    猜你喜欢
    • 1970-01-01
    • 2017-03-24
    • 2013-11-03
    • 2012-04-04
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    相关资源
    最近更新 更多