使用列表索引的For循环

2024-04-29 20:21:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个代码,它应该将主列表中的每个项目打印在一个新行上,并带有相应的行号。在以下代码中,它可以正常工作:

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

然而,当我试图将它植入一个“tic-tac-toe”游戏中时,我却使它无法工作。以下是益生菌代码:

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]))

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

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

xy都设置为2时,输出为:

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

我想要的是13号下降

如果有一个页面涵盖了这一点,请链接它。如果需要更多的代码,请这样说。否则,请提前感谢。:)


Tags: 项目代码inboard列表forindexmy
2条回答

为此,您不想使用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函数,例如:

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]))

相关问题 更多 >