Python,更改列表中列表的索引

时间:2015-04-23 09:22:40

标签: python list loops

我正在尝试为游戏Connect Four创建一个程序,其中棋盘可以是anysize。提示用户输入行数和列数,通过某些代码创建一个0开放点的2d列表。所以对于3列乘4排板

blankBoard = [[0,0,0],[0,0,0],[0,0,0],[0,0,0]]

我正在尝试创建一个输入,列表和列的功能以将播放片段放入,由X表示...因此,例如,如果您选择了第3列,则更新的电路板列表将显示为< / p>

blankBoard = [[0,0,0],[0,0,0],[0,0,X],[0,0,0]]

我的函数是假设获取列的输入,并在列列表中找到最后一个空白的索引。我的问题是通过更改所有列表来删除和替换该特定索引。

def move(blankBoard, column):
    newBoard = blankBoard[:]
    col = column - 1  # The first column in connect four is 1, not 0
    index = -1
    i = 0
    while i < len(newBoard[col]):
        if newBoard[col][i] == 0:
            index = index + 1
        i = i + 1
    newBoard[col][index] = "X"   # This line of code I think is bad
    print(newBoard)
    return ""

使用以下输出...

newBoard = [[0,0,X],[0,0,X],[0,0,X],[0,0,X]]

但正如我所说,我只希望X在“col”表示的子列表中 如果更改子列表的特定索引的代码行不在while循环中,为什​​么循环遍历列表中的所有列(子列表)?

1 个答案:

答案 0 :(得分:0)

在设置第一个(反转后,真的是最后一个)tail0之后,您是否可以循环显示反转列表并中断?

x

<强> [编辑]

通过调用a = [0,0,'x'] for i in reversed(range(len(a))): if a[i] == 0: a[i] = 'x' break print a # will print [0, 'x', 'x'] 并以move作为参数来运行代码,可以得到预期的结果,而不是您描述的行为。但是,如果您使用blankBoard作为参数调用move或将[[0]*3]*4作为参数调用(其中[arr,arr,arr,arr]),则会发生重复行为。这是因为在最后两个示例中,所有子列表都是对同一列表的引用。

请参阅https://stackoverflow.com/a/240205/1458374