KRS*_*fun 5 python grid initialization list
所以我刚刚完成了CodeAcademy Battleship问题的一部分,并提交了正确的答案,但我很难理解为什么它是正确的.
我们的想法是建立一个5x5网格作为板,填充"O".我使用的正确代码是:
board = []
board_size=5
for i in range(board_size):
board.append(["O"] *5)
Run Code Online (Sandbox Code Playgroud)
但是我很困惑为什么这不会在一行中创建25个"O",因为我从未指定迭代到单独的行.我试过了
for i in range(board_size):
board[i].append(["O"] *5)
Run Code Online (Sandbox Code Playgroud)
但这给了我错误:IndexError: list index out of range.任何人都可以解释为什么第一个是正确的而不是第二个?
["O"]*5
Run Code Online (Sandbox Code Playgroud)
这将创建一个大小为5的列表,填充"O": ["O", "O", "O", "O", "O"]
board.append(["O"] *5)
Run Code Online (Sandbox Code Playgroud)
这将上面的列表添加(添加到列表的末尾)到board [].在循环中执行此操作5次会创建一个列表,其中包含上述5个列表.
[["O", "O", "O", "O", "O"],
["O", "O", "O", "O", "O"],
["O", "O", "O", "O", "O"],
["O", "O", "O", "O", "O"],
["O", "O", "O", "O", "O"]]
Run Code Online (Sandbox Code Playgroud)
你的代码不起作用,因为列表没有用python中的大小初始化,它只是作为一个空容器启动[].为了让你的工作,你可以做到:
board = [[],[],[],[],[]]
Run Code Online (Sandbox Code Playgroud)
在你的循环中:
board[i] = ["O"]*5
Run Code Online (Sandbox Code Playgroud)