2017-01-22 20 views
-3

この関数は、配列内の要素の番号を検索し、存在する場合は配列の要素の番号を返し、入力番号が配列に存在しない場合は-1を返します。C関数をPython関数に変換する

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

私はこの関数のpythonバージョンを書いていますが、私はPythonで配列の代わりにリストを使うので、Pythonで書く方法はわかりません。

私はPythonで以下のコードを書きましたが、それは

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

あなたは長さを持っている必要はありません! –

+0

あなたはどのバージョンのPythonを使用していますか? –

+0

im使用するpython 3.6 –

答えて

3

を動作しませんここでループ同等です:

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

は、何が必要やっている、しかし、機能lst.index(no)がありますしかし、より効率的な方法で:

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について悪い感じる必要はありません。私はそれを個人的には取っていません。 –

1

次回エラーが表示された場合は役立ちます。

コードにはいくつかの問題があります。1. "list"は既存のオブジェクトの名前です。2.最初のアイテムが目的のオブジェクトであるかどうかをチェックしています。 3.リストの要素にアクセスするには、かっこではなく大括弧が必要です。

これは動作するように表示されます。余談として

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

配列がソートされている場合、線形検索よりも優れリストの検索方法があります。binary search

+1

ここで 'x = 0'は不要です。ソートされた配列の場合は 'bisect'のpythonモジュールを使用することができます。 –

+0

Fabreに感謝します。bisectについて知っておいてよかったです。 –

関連する問題