【问题标题】:Python strange behavior with for loop带有for循环的Python奇怪行为
【发布时间】:2016-07-20 04:46:04
【问题描述】:

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

我正在尝试搜索 pc 循环以跟踪玩家(人类)的移动并预测井字游戏中的下一步移动。

因此,我创建了一个 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”在中间的位置和“X”在最后一个列表中的位置是相同的,而不是相同的。这是我的问题。请注意,当我将 lst 更改为:

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

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

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

请帮忙谢谢

【问题讨论】:

  • 最后一次迭代的预期输出是 [1,2]?
  • 您的代码缩进错误。这在 python 中很重要,并且确实会改变你的代码输出。你应该纠正它。

标签: python for-loop iteration


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    正如 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]]

    【讨论】:

      猜你喜欢
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      相关资源
      最近更新 更多