2016-07-20 15 views
0

私は初心者です。 私はこのforループに問題があります。forループでのPythonの変な動作

私は、プレイヤー(人間)が行った動きを追跡し、次の動きをチック・タック・トー・ゲームで予測するために、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" in the MIDDLEと "X" intの最後のリストの位置は同じではないことになります。これは私の問題です。

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

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

のpythonからの結果は、最後の「X」の正しい位置を示していますが、以前の一つに、それが最後の「X」

のための強固な地位を与えた:私はにLSTを変更する場合があります助けてくださいありがとうございます

+0

あなたの予想される出力は次のようになります。私は、そのコードの結果が

ような
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) 

何かをするだろう[1,2]? –

+0

コードのインデントが間違っています。これはPythonでは重要で、コードの出力内容を変更します。それを修正する必要があります。 – zezollo

答えて

0

ジェフ・ミートボール・ヤン(Jeff Meatball Yang)が指摘しているように、インデックスは最初の出現をリストで見つけるように機能します。最後の反復のための[[0、0]、[1、1]、[2、1]]

+0

ありがとうございました – user6277136

1

最後の繰り返しで外側のループで、リテラル配列のインデックスをテストしています:[[],["X"],[]]。したがって、Pythonは最初のものを等号で見つけます。これは2番目のアイテムと同じです。

+0

ありがとうございました – user6277136

関連する問題