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

时间:2015-11-12 22:00:00

标签: python wxwidgets

这是我的问题:

[5, 6, 7]
[5, 6, 7]

如您所见,我使用list创建了一个矩阵,我需要更改用户选择的列的单个元素,所以我尝试使用此代码:

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

其中'num'是0到6之间的整数,表示子列表。我想选择一个列,并设置最低' - '可用(如果有重力),例如,如果我选择'0'

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

但实际上我的程序会更改所有列的值

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

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

2 个答案:

答案 0 :(得分:0)

将之前的评论放在一起:

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

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

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

答案 1 :(得分:0)

首先在lists中定义lists,您仍需要将lists,分开。以下是。

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

会变成。

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

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

gameField[3][3] = 'X'

如果考虑到algorytmic因素,此访问的运行时间为1,现在不相关。但扩大规模可能会成为一个问题。总而言之,我创建了以下运行代码。

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

gameField[3][3] = 'X'

print(gameField)