2015-01-30 2 views
0

지정된 값이 2D 배열의 주어진 행이나 주어진 열에 있는지 알아 내려고하고 있습니다.2D 배열의 행과 열에서 값 찾기

함수 existsInRowOrCol 명백하게 혼합 형태의 중첩 된 목록으로 잘 작동하지 않는다 연산자를 이용한다.

어떻게 해결할 수 있습니까?

import numpy as np 

field = np.array([['.','.','.',8,'.','.',3,'.',4],  #0 
       ['.','.',6,'.','.','.','.',7,'.'],  #1 
       [2,'.','.','.',1,'.','.','.','.'],  #2 
       ['.',8,'.',3,'.',4,'.',6,'.'],   #3 
       [1,'.','.','.',5,'.','.',9,'.'],  #4 
       [5,'.','.','.',8,'.',7,'.','.'],  #5 
       ['.',9,'.',1,'.',8,'.',5,'.'],   #6 
       [3,'.','.',6,'.','.',8,'.','.'],  #7 
       ['.','.',8,'.',2,7,'.',1,'.'],   #8 
       ]) 

def existsInRowOrCol(entry, r, c): 
    row = field[r,:] 
    print(row) 
    if entry in row: 
     return True 
    col = field[:,c] 
    print(col) 
    if entry in col: 
     return True 
    return False 

print(existsInRowOrCol(8, 0, 0)) 

마지막 명령은 false를 출력하지만 true 여야합니다.

참고 : 점을 0으로 바꾸면 작동합니다. 당신이 나를 위해 일한 따옴표로 항목을 갖는 괜찮다 경우

답변

0

:

>>> a = numpy.array(['.','.','8']) 
>>> a 
array(['.', '.', '8'], 
    dtype='|S1') 
>>> row = a[:] 
>>> entry = 8 
>>> if entry in row: 
... print 'true' 
... 
>>> entry = '8' 
>>> if entry in row: 
... print 'true' 
... 
true 

그냥 당신이 따옴표 항목을 통과해야합니다.

+0

혼합 유형이 문제가됩니까? – bogus

+0

어쨌든이 예제의 경우 인 것 같습니다. 어쩌면 다른 사람이 필요로하는 정보를 혼합하여 보관할 수도 있습니다. 나는 대체 할 대안을 제시하려고 노력했다. ' 0과 함께. – CSCFCEM

+1

좀 더 놀고 난 후에. .. 내가 섞 였을 때와 같아 보인다. 및 8 (따옴표 안에), 파이썬 자동으로 따옴표로 넣어 것입니다. 그것은 당신의 if 조건에서 그것이 발견되지 않은 이유를 설명 할 것입니다. 인쇄 (행) 및 인쇄 (열) 때 숫자 주위에 작은 따옴표가 나타 납니까? – CSCFCEM

관련 문제