【问题标题】:How to set a list index as the values within a dictionary?如何将列表索引设置为字典中的值?
【发布时间】:2020-10-15 11:35:59
【问题描述】:

我有一个名为“board”的嵌套列表,它应该像一个 3x3 网格(这是一个井字游戏程序,我是一个完整的初学者):

board = [[' ', ' ', ' '], 
    [' ', ' ', ' '], 
    [' ', ' ', ' ']]

要访问/更改此嵌套列表中的单个值,我相信我会使用两个索引,就像这样,在这种情况下更改第一个值:

board[0][0] = 'X'

我不想输入两个坐标来进行移动,所以我想为数字 1-9 分配一个特定的坐标或棋盘上的位置,所以只需按一下键。我试着用字典来做这个:

dicBoard = {7: [0][0], 8: [0][1], 9: [0][2],
            4: [1][0], 5: [1][1], 6: [1][2], 
            1: [2][0], 2: [2][1], 3: [2][2]}

但这不起作用,调用print(dicBoard[7]) 不会像我想要的那样输出 [0][0],而只是输出 0。因此,如果我尝试使用 board[dicBoard[7] = 'X' 来定位特定值例如,计算机将其读取为 board[0] 而不是 board[0][0],这意味着它针对列表的整个第一行。

我还尝试将字典重写为dicBoard = {7: board[0][0]...} 等等,但这不起作用,因为我无法通过字典中的单个输入更改原始列表“板”中的任何值。 dicBoard[7] = 'X' 不会将 board[0][0] 更改为“X”,它只会更改字典本身中的值。

我不能只使用字典并摆脱列表的原因是因为我连续检查三个 X 或 O 的方式需要一个带有坐标的“二维”列表,而我不需要我认为我可以将坐标分配给字典。显然有不同的方法可以使用字典来检查是否获胜,但我试图在不硬编码井字游戏的每个组合的情况下做到这一点。

我自己可能过于复杂了,但这并不是什么真正严重的事情,只是为了让我学习,我宁愿接受挑战,理解如何做这本字典 + 列表的东西。

:) 谢谢

【问题讨论】:

  • 你为什么要使用字典像board[x][y]这样的列表访问有什么问题?
  • @komatiraju032 因为我只想有一个输入,而不是输入 x 和 y,我想输入 z 并且已经有 z = [x][y]。我不知道字典是否是最好的方法。

标签: python list dictionary indexing


【解决方案1】:

你可以在这里使用一个元组。

>>> dict_board = {7: (0,0), 8: (0,1), 9: (0,2),
                  4: (1,0), 5: (1,1), 6: (1,2),
                  1: (2,0), 2: (2,1), 3: (2,2)}

>>> dict_board(7)
(0,0)

现在您可以将position_integer and value 作为用户的输入。现在您可以编写ifelifelse 条件来验证条目。

示例:7,1

建议:

您甚至不需要考虑 [0][0] 个位置。您可以要求用户在位置 1,2,3,...9 输入并维护字典 {1: '0', 2: 'x',...9:'x'} 现在您验证抽动

【讨论】:

    【解决方案2】:

    您可以使用使用索引更改列表的辅助功能来解决它​​。 修改您的字典以将索引存储为元组。

    dicBoard = {7: (0, 0), 8: (0, 1), 9: (0, 1),
                4: (1, 0), 5: (1, 1), 6: (1, 2), 
                1: (2, 0), 2: (2, 1), 3: (2, 2)}
    

    您可以编写一个函数来使用字典更新列表中的值

    def set_value(idx, val):
        if idx in dicBoard:
            i, j = dicBoard.get(idx)
            board[i][j] = val
    

    您可以通过调用方法set_value(move_number, value) 传递两个参数来设置值。

    set_value(7, 'X')
    

    【讨论】:

      猜你喜欢
      • 2016-07-27
      • 1970-01-01
      • 1970-01-01
      • 2022-10-06
      • 2014-12-09
      • 1970-01-01
      • 1970-01-01
      • 2021-12-06
      • 1970-01-01
      相关资源
      最近更新 更多