2017-01-22 6 views
-3

Diese Funktion durchsucht die Nummer eines Elements in einem Array und gibt die Nummer des Elements im Array zurück, falls vorhanden, oder gibt -1 zurück, wenn die Eingangsnummer nicht im Array existiertKonvertieren einer C-Funktion in Python-Funktion

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

und ich möchte die Python-Version dieser Funktion schreiben, aber da ich Listen anstelle von Arrays in Python verwende, weiß ich nicht, wie man es in Python schreibt.

i schrieb den Code in Python, aber es funktioniert nicht

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

Sie nicht brauchen Länge zu haben! –

+0

Welche Version von Python verwenden Sie? –

+0

Ich benutze Python 3.6 –

Antwort

3

Hier ist die Schleife äquivalent:

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

Es ist jedoch Funktion lst.index(no) das, was Sie tut benötigen, aber in einer effizienteren Weise:

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

Oder mit den try/except (wahrscheinlich die schnellste):

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

'index' benötigt einen' try/exception'-Block BTW –

+0

@ Jean-FrançoisFabre Richtig. – DyZ

+1

Gotcha: Ich hatte bereits upvoted :) und Sie müssen sich nicht schlecht fühlen über Ihre wahrscheinlich downvoting meiner Mist-Antwort. Ich nehme es nicht persönlich an, im Gegensatz zu den Bozos, die dich seriell abwandern, wenn du eine Frage dämpelst. –

1

Es würde helfen, wenn Sie den Fehler enthalten, die Sie nächste Zeit.

Ihr Code hat einige Probleme: 1. "Liste" ist der Name eines bereits vorhandenen Objekts 2. Sie überprüfen nur, ob das erste Objekt das gewünschte Objekt ist, da zu diesem Zeitpunkt beide Zweige zurückkehren. 3. Der Zugriff auf ein Element einer Liste erfordert eckige Klammern, keine Klammern.

Dies scheint zu funktionieren:

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

Als Nebenwirkung gibt es bessere Methoden Liste als lineare suchend, wenn das Array sortiert ist: binary search

+1

'x = 0' ist hier nicht notwendig. und FYI für sortierte Arrays können Sie 'Bisect' Python-Modul verwenden. –

+0

Danke Fabre, gut zu wissen, Halbierung. –

Verwandte Themen