繁体   English   中英

具有列表索引 Python 的 For 循环

[英]For loop with list indexes Python

我有这段代码应该将主列表中的每个项目打印在具有相应行号的新行上。 在下面的代码中它工作正常:

my_list = [["a", "b", "c"], ["d", "e", "f"], ["g", "h", "i"]]
for item in my_list:
    print(my_list.index(item)+1, item)

但是,当我尝试将其引入“井字游戏”游戏时,我会使其无法正常工作。 这是有问题的代码:

def showGrid(y, x, "X"):
    board[y][x] = "X"
    print("  x x x")
    for row in board:
        print(board.index(row)+1, sub("[,']", "", str(row)[1:-1]))

上面代码的 output 与第一个示例不同,而是根据yx值给出随机 output。 例如,如果yx都设置为 1,则 output 为:

  x x x
1 X - -
2 - - -
2 - - -

xy都设置为 2 时,output 为:

  x x x
1 - - -
2 - X -
1 - - -

我想要的是 1 2 3 下降。

如果有包含此内容的页面,请链接它。 如果需要更多代码,请说出来。 否则提前谢谢。 :)

您不想为此使用index方法,原因有两个:(1)继续搜索当前列表索引效率低下,以及(2)如果列表中有重复条目,它将始终返回第一个匹配元素的索引,这是导致您看到的问题的原因。

试试这个:

def showGrid(y, x, "X"):
    board[y][x] = "X"
    print("  x x x")
    for ix, row in enumerate(board):
        print(ix+1, sub("[,']", "", str(row[1:-1]))

它的工作方式是enumerate为每个列表元素生成一个元组。 元组的第一个值是列表索引,元组的第二个值是列表元素。

board.index(row)返回找到row的第一个索引。 在这种情况下,第一个索引是0 ,因为它包含- - - 您可以通过遍历一个范围来避免使用list.index function,例如:

def showGrid(y, x, "X"):
    board[y][x] = "X"
    print("  x x x")
    for i in range(len(board)):
        row = board[i]
        print(i+1, sub("[,']", "", str(row)[1:-1]))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM