这是我的问题:
[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', '-', '-', '-', '-', '-', '-']
我该如何解决?你有任何想法吗?
答案 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)