2017-10-10 2 views
0

python3에서 "try/catch"블록으로 O (1) 시간에 사전에 요소가 있는지 확인하고 싶습니다. 나는이 작업을 수행 할 때 나는 구문 오류가 왜 나는 확실하지 않다 : 편의상Python 3.6.3 KeyError

try a_dict[i]: 
    print(i) 
except KeyError: 
    a_dict[i] = ... #some item 

이의 내가 배열에 중복 검사하는 기능을 가지고 있고이를 사용하고이 기능을 가정 해 봅시다 논리 위에서 :

def hasDuplicate(a): 
    a_dict = dict() 
    for i in a: 
     # logic from above 
     try a_dict[i]: 
      print(i) 
     except KeyError: 
      a_dict[i] = True 
     # end of logic from above 
    return -1 

try 문을 사용하여 구문 오류가 발생합니다.

O (N) 시간을 확인하기 때문에 in을 사용하지 않으려합니다. 사전에 O (1) 시간을 확인하지 않는 한? 어떤 도움이나 의견이 구문은해야

답변

1

을 감상 할 수있다 : "/ 시도 캐치를"당신의 언급에서

def hasDuplicate(a): 
    a_dict = dict() 
    for i in a: 
     # logic from above 
     try: 
      print(a_dict[i]) 
     except KeyError: 
      a_dict[i] = True 
     # end of logic from above 
    return -1 

난 당신이 자바에서 오는 것 같아요? :-)

+0

글쎄, 나는 "try/except"라고 말했을 것이지만 잘 알려져 있지 않습니다. 도와 줘서 고마워! –

+0

문제가 없습니다! 나는 try/except가 파이썬 개발자들에게 매우 잘 알려져 있다고 생각한다. 'muggles'에 관해 확실하지 않은! –

+0

내 질문의 올바른 구현 때문에 답변으로 표시 해요,하지만 그것은 @ 이그나시오 바스케스 - 아브람 대답은 해시 테이블을 확인 어떤 상황에서 사용해야한다는 점에 유의해야합니다 –

2

O (N) 시간을 확인하기 때문에 in을 사용하지 않으려합니다. 사전에 O (1) 시간을 확인하지 않는 한?

이 있습니다. 사전은 전문화 된 해시 맵이므로 포함 검사는 상각 된 O (1)입니다.

+0

잘 알려 줘서 고마워. 앞의 답을 옳은 것으로 표시 하였지만, 파이썬 사전에서는''in''이 사실 O (1)이기 때문에 해쉬 테이블을 검사하는 어떤 상황에서도이 대답을 사용해야합니다. –

0

나는 이것이 당신이 원하는 것이라고 생각합니까? Duplicate를 찾으려면 try/catch를 사용할 필요가 없습니다.

def hasDuplicate(a): 
    a_dict = dict() 
    for i in a: 
     # logic from above 
     try: 
     if a_dict[i]: 
      print(i) 
     except KeyError: 
     a_dict[i] = True 
     # end of logic from above 
    return -1 


print(hasDuplicate([1, 2, 3, 4, 1])) //print duplicate value (i.e. 1 and will return -1)