2012-09-18 5 views
1

매트릭스 행 (즉,리스트 목록)과 주어진 문자열을 어떻게 비교합니까?매트릭스 행과 문자열 비교

index = 99999 
for i in range(len(text)): 
    if (matrix[i][0:len(text)] == text): 
     index = i 

은 내가 행 정확히 하나가 포함되어 있음을 확실히 알에 대한 행의 수 "행 == 텍스트"하지만, 위의 코드 출력 99999

로 "인덱스"를 원하는 끈. 예를 들어, 행렬은

['a', 'i', 'n', 'e', 'm'] 
['e', 'm', 'a', 'i', 'n'] 
['i', 'n', 'e', 'm', 'a'] 
['m', 'a', 'i', 'n', 'e'] 
['n', 'e', 'm', 'a', 'i'] 

이고 I는 "메인"(이 경우에는 3 번) 인 행 알고 싶어. 감사합니다.

+0

어쩌면 아무것도 문자열과 비교할 수 있습니까? – Aesthete

+1

행렬은 어떻게 생겼습니까? 'print matrix'의 출력물을 붙여 넣을 수 있습니까? – nneonneo

+0

@nneonneo, 예를 게시했습니다. –

답변

2

try: 
    index = matrix.index(list(text)) 
except IndexError: 
    index = 99999 

list(text) 문자의 목록에 문자열을 전환하십시오. list.index은 지정한 항목을 검색하고 (동등 비교로 == 사용) 찾아낸 경우 해당 색인을 반환하거나 찾을 수없는 경우 IndexError을 반환합니다.

'찾을 수 없음'값으로 99999을 사용하지 않는 것이 좋습니다. -1과 같은 값을 사용하는 것이 더 안전합니다 (아니면 더 나은). 예외를 처리하지 않는 한 예외 만 남겨 두십시오.

문자열이 매트릭스에 있어야한다는 것을 알고 있다면 index = matrix.index(list(text)) 만 있으면됩니다.

+0

멋지고 간단합니다. 고맙습니다! –

2
for idx,row in enumerate(matrix): 
    if ''.join(row) == text: 
    print idx 

하거나, 한 - 라이너 :

matrix[i][0:len(text)] == text

에서 : 당신의 시도가 작동하지 않은 이유에 대해서는

idx = [''.join(x) for x in matrix].index(text)

, 그 이유는이 테스트입니다 당신이 성공하기를 기대하고있는 지점인데 실제로는 목록을 문자열과 비교하지만 ['m', 'a', 'i', 'n', 'e'] != 'maine'입니다. 그러나 matrix[i][0:len(text)] == list(text)이 효과가있었습니다.