如何在 python 矩阵中设置单元格?

How can I set a cell in python matrix?

这是我的问题:

self.gameField = [
    ['-', '-', '-', '-', '-', '-', '-']
    ['-', '-', '-', '-', '-', '-', '-']
    ['-', '-', '-', '-', '-', '-', '-']
    ['-', '-', '-', '-', '-', '-', '-']
    ['-', '-', '-', '-', '-', '-', '-']
    ['-', '-', '-', '-', '-', '-', '-']
]

如您所见,我使用列表创建了一个矩阵,我需要更改用户编辑的列的单个元素 select,所以我尝试使用以下代码:

for z in self.gameField:
    if z[num] == "-":
        z[num] = "X"
        print "Done"

其中'num'为0到6的整数,表示子列表。我想 select 列,并设置最低的 '-' 可用(就像有重力一样),例如,如果我 select '0'

        ['-', '-', '-', '-', '-', '-', '-']
        ['-', '-', '-', '-', '-', '-', '-']
        ['-', '-', '-', '-', '-', '-', '-']
        ['-', '-', '-', '-', '-', '-', '-']
        ['-', '-', '-', '-', '-', '-', '-']
        ['X', '-', '-', '-', '-', '-', '-']

但实际上我的程序改变了所有列的值

        ['X', '-', '-', '-', '-', '-', '-']
        ['X', '-', '-', '-', '-', '-', '-']
        ['X', '-', '-', '-', '-', '-', '-']
        ['X', '-', '-', '-', '-', '-', '-']
        ['X', '-', '-', '-', '-', '-', '-']
        ['X', '-', '-', '-', '-', '-', '-']

我该如何解决?你有什么想法吗?

将之前的评论放在一起:

假设您的网格创建良好(参见多个子列表引用可能存在的问题 - 基本上如果您使用类似 self.gameField = [[['_']*7]*6] 的内容创建网格, 似乎 很短并且干净,在你的情况下它实际上很糟糕),你只需要在你放置 "X" 后立即跳出 for 循环(否则你只会继续填充整个列!):

for z in self.gameField:
    if z[num] == "-":
        z[num] = "X"
        print "Done"
        break

请注意,您可能希望以相反的顺序迭代行(您的 for 循环),以便在打印网格时重力向下(或反向打印网格)...

首先在lists中定义lists,还需要将lists,分开。所以下面。

[['-','-']['-', '-']]

会变成。

[['-','-'],['-', '-']]

其次,您可以通过这种方式访问​​ list 索引,而不是遍历 lists

gameField[3][3] = 'X'

如果考虑算法因素,此访问的运行时间为 1,现在不相关。但扩大规模可能会成为一个问题。综上所述,我创建了以下 运行 代码。

gameField = [['-', '-', '-', '-', '-', '-', '-'],['-', '-', '-', '-', '-', '-', '-'],['-', '-', '-', '-', '-', '-', '-'],['-', '-', '-', '-', '-', '-', '-'],['-', '-', '-', '-', '-', '-', '-'],['-', '-', '-', '-', '-', '-', '-']]

gameField[3][3] = 'X'

print(gameField)