2016-11-01 3 views
0

목록을 반환해야하는 함수와 목록의 특정 문자가 마지막으로 나오는 열을 작성하고 있습니다. 문자가 목록의 목록에 없으면 함수는 None을 반환해야합니다. 이 함수는 첫 번째 항목을 무시하거나 건너 뛴 다음 마지막 항목의 행과 열을 순서쌍으로 반환합니다.목록의 마지막 문자 찾기

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) 

내 현재 코드가 행의 첫 번째 항목과 마지막 항목의 행을 찾습니다. 어떻게하면 파이썬이 첫 번째 사건을 무시하고 마지막 사건의 행과 열을 반환하도록 지시 할 수 있습니까?

코드 :

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

시작을 뒤쪽으로 이동 :

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 advice helped 그러나 예제에서는 각 문자에 대한 좌표 쌍이 올바르게 반환됩니다 – n00bprogrammer22

0

알고리즘의 문제는 당신이 요소의 첫 번째 항목을 찾으 당신이 FAS로 반환하는 것입니다. 당신이 j==symbol, 당신은 당신의 기호의 마지막 occurance있을 것이다 색인을 모두 저장하고 모든 루프 후 매트릭스

을 ruuning 계속 찾을 때

은 그래서 당신은 무엇을해야 ..

또는,이다 두 번째 aproach는 끝에서부터 시작하여 역행렬을 실행합니다.이 경우 첫 번째 발생은 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 이해 한 라이너를 할 수있는 각 문자의 위치를 ​​원하는 경우에 그렇다면, 당신은 다음과 같이 사전을 usign 할 수 :

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