2017-01-22 1 views
-3

이 함수는 배열의 요소 번호를 검색하여 배열에 요소가있는 경우 요소 번호를 반환하고 배열에 입력 번호가없는 경우 -1을 반환합니다.C 함수를 파이썬 함수로 변환

int iSearch (int st[],int len,int no) 
{ 
    int i; 
    for (i=1;i<=len;i++) //len=lenth of the array , no = the number that we want to search in the array , st[] = the array 
     if (st[i]==no) 
      return i; 
     return -1; 
} 

이 함수의 파이썬 버전을 작성하고 싶지만 파이썬에서 배열 대신 목록을 사용하기 때문에 파이썬으로 작성하는 방법을 모릅니다. ,이

def iSearch(lst,no): 
    for i,x in enumerate(lst): 
    if x == no: 
     return i 
    return -1 

그러나, 기능 lst.index(no)는 당신이 필요로하는 일을한다 :

내가 아래 파이썬에서 코드를 작성하지만

def iSearch(list,lenth,no): 
    x=0 
    for x in range (lenth): 
     if (list(x) == no) 
      return i 
     else 
      return -1 
+1

: AS를

def linear_search_c(l,length,num): for x in range(0,length): if (l[x] == num): return x return -1 

를 제외하고, 배열이 정렬되어있는 경우 선형 검색 이상의 방법을 찾고 더 나은 목록이 있습니다! –

+0

어떤 버전의 파이썬을 사용하고 있습니까? –

+0

메신저를 사용하여 파이썬 3.6 –

답변

3

여기 루프 상당의 작동하지 않습니다 그러나보다 효율적인 방법으로 :

def iSearch(lst,no): 
    if no in lst: 
    return lst.index(no) 
    return -1 

또는 try/(가장 빠를 것 같은) except :

def iSearch(lst,no): 
    try: 
    return lst.index(no) 
    except ValueError: 
    return -1 
+1

'index'는'try/except' 블록이 필요합니다. BTW –

+0

@ Jean-FrançoisFabre 수정하십시오. – DyZ

+1

gotcha : 나는 이미 upvoted : 그리고 내 쓰레기 답변의 가능성 downvoting에 대해 나쁜 생각하지 않아도됩니다. 나는 개인적으로 받아들이지 않는다. 당신이 질문을 무시할 때 당신을 연속적으로 다운볼하는 bozos와는 다르다. –

1

당신이 다음 번에있어 오류를 포함하는 경우 그것은 도움이 될 것이다.

코드에 몇 가지 문제가 있습니다. 1. "list"는 이미 존재하는 객체의 이름입니다. 2. 첫 번째 항목이 원하는 객체인지 확인하는 것은 그 시점에서 두 가지 분기가 모두 반환되기 때문입니다. 3. 목록의 요소에 액세스하려면 괄호가 아니라 대괄호가 필요합니다.

이 작동하도록 나타납니다 당신이 길이를 할 필요가 없습니다 binary search

+1

여기서'x = 0'은 불필요합니다. 그리고 FYI는 정렬 된 배열을 위해'bisect' 파이썬 모듈을 사용할 수 있습니다. –

+0

Fabre에게 감사드립니다. bisect에 대해 잘 알고 있습니다. –

관련 문제