2016-11-01 13 views
0

リストをリストの中で特定の文字が最後に出現した行とカラムを返さなければならない関数を書いています。文字がリストのリストにない場合、関数はNoneを返すはずです。この関数は最初の出現を無視またはスキップし、最後の出現の行とcolを順序付きペアとして返します。リストのリスト内の文字の最後の出現の検索

Example: 

lst = [['.','.','.','e'], 
     ['A','A','.','e'], 
     ['.','.','.','e'], 
     ['.','X','X','X'], 
     ['.','.','.','.'], 
     ['.','y','Z','Z']] 

#For this list of lists the function should return (5,3) for Z since it is in the 6th list, 
#and is the 6th value (python starts the count at 0) and for X it should return (3,3) 

私は私の現在のコードは、文字ではなく、最後に出現するの最初の出現の行と列を見つけたと思います。最初の出現を無視し、代わりに最後の出現の行とcolを返すようにPythonに指示できますか?

コード:

def get_far_end(symbol,lot): 
    for i in range(len(lot)): 
     for j in lot[i]: 
      if j == symbol: 
       return i ,lot[i].index(j) 
+1

開始から終了して後方に進むと、あなたが見つけた最初の出来事があなたのリストの最後のものになります。 – Knells

答えて

1

スタートと逆方向に移動します:もしそうなら、あなたは次のように辞書をusignを行うことができ

def get_far_end(symbol,lot): 
    for i in range(len(lot)-1,-1,-1): 
     for j in range(len(lot[i])-1,-1,-1): 
      if lot[i][j] == symbol: 
       return i ,j 
    return None 
+0

everyonesのアドバイスをお手伝いしてくれてありがとうございますが、あなたの例では各文字の座標を正しく返します – n00bprogrammer22

0

あなたのアルゴリズムの問​​題は、あなたが要素の最初の発生を見つけるとあなたは、FASとして戻ってきているということです。あなたはj==symbolは、あなたがあなたのシンボルの最後のoccuranceを持つことになり、インデックスの両方を保存し、すべてのループの後にあなたの行列

をruuning保つ見つけたとき

だから、あなたが何をすべき..

か、あります最初の出現を返すことができます。j==symbol

0

「。」以外の文字に興味があると思います。端から

lst = [['.','.','.','e'], 
     ['A','A','.','e'], 
     ['.','.','.','e'], 
     ['.','X','X','X'], 
     ['.','.','.','.'], 
     ['.','y','Z','Z']] 

out_dict = {} 

for i in range(len(lst)): 
     for j in range(len(lst[i])): 
      if lst[i][j] is not '.': 
       out_dict[lst[i][j]] = [i,j] 


print(out_dict) 
# {'Z': [5, 3], 'y': [5, 1], 'X': [3, 3], 'A': [1, 1], 'e': [2, 3]} 
0

を使用すると、各文字の位置をしたい場合は、dictの理解と1つのライナーを行うことができます:

lst = [['.','.','.','e'], 
     ['A','A','.','e'], 
     ['.','.','.','e'], 
     ['.','X','X','X'], 
     ['.','.','.','.'], 
     ['.','y','Z','Z']] 

res = {c: (i, j) for i, sub in enumerate(lst) for j, c in enumerate(sub) if c != '.'} 
print(res) 

出力:

{'A': (1, 1), 'X': (3, 3), 'Z': (5, 3), 'e': (2, 3), 'y': (5, 1)} 
関連する問題