for循环的Python奇怪行为

时间:2016-07-20 04:46:04

标签: python for-loop iteration

我是初学者学习python。 我对这个for循环有问题。

我正在尝试使用PC的搜索循环来跟踪玩家(人类)所做的移动并预测tic tac toe游戏中的下一步行动。

结果,我创建了一个for循环来附加玩家(人类)所做的动作,但发生了一些奇怪的事情

    lst = [ [ "X",[], [] ],
    [ [], "X", []   ],
    [ [], "X", []   ] ]
    temp_lst = []
    for i in lst:
        lst_1 = []
        for j  in i:
            if j  == "X":
            lst_1.append(lst.index(i))
            print(lst.index(i))
            lst_1.append(i.index(j))
            print(i.index(j))
        temp_lst.append(lst_1)

  print (temp_lst)

我的IDLE的结果是:

    0
    0
    1
    1
    1
    1
   [[0, 0], [1, 1], [1, 1]]

请注意,“X”IN THE MIDDLE的位置和最后一个列表中的“X”是相同的,但不是。这是我的问题。请注意,当我将lst更改为:

     lst = [ [ "X",[], [] ],
    [ [], "X", []   ],
    [ [], [], "X"  ] ]       

   result: [[0, 0], [1, 1], [2, 2]]

python的结果显示了最后一个“X”的正确位置,但是在前一个“X”中它给出了最后一个“X”的强势位置

请帮助谢谢

2 个答案:

答案 0 :(得分:1)

在外部循环中,在最后一次迭代中,您将测试文字数组的索引:[[],["X"],[]]。所以Python通过相等找到第一个:它与第二个项目相同。

答案 1 :(得分:0)

正如Jeff Meatball Yang所说,索引的作用使得它首先出现在列表中。我会做那样的事情

lst = [["X", [], []],
   [[], "X", []],
   [[], "X", []]]
temp_lst = []

for i in range(len(lst)):
    lst_1 = []
    for j in range(len(lst[i])):
        if lst[i][j] == "X":
            lst_1.append(i)
            print(i)
            lst_1.append(j)
            print(j)
    temp_lst.append(lst_1)

print (temp_lst)

该代码的结果是:[[0,0],[1,1],[2,1]]