Impressum
< Arrays 2 Inhalt Arrays 4 - Bubblesort >

Arrays in Python - Suchen

Suchen im Array bedeutet, dass man überprüft ob eine Wert im Array vorkommt. Solchen Suchen begegnen wird oft im Alltag: Die meisten Suchen erfolgen, indem man Element für Element mit dem gesuchten Wert vergleicht.
Es kommt aber auch vor, dass man nicht genau einen Wert sucht, sondern nur mit dem Anfang z.B. eines Namens (z.B. ist "Schm" im Telefonbuch und erhalten "Ja: Schmitt"), oder wir suchen ob ein Film mit Python existiert (ja Monty Python - Flying Circus) oder wir wollen wissen wie oft unser Name in Polizei Suchmeldungen auftaucht.
All dies ist Suchen und beginnt mit einer for-Schleife über ein Array.

Ist ein bestimmtes Element im Arrays?

Die einfachste Art der Suche ist, dass man wissen will ob ein Element im Array ist und ein ja (True) oder nein (False) als Antwort bekommt.
Als Codefragment:
gefunden = False      
for i in range(len(werte)):
    if werte[i]==gesucht:
        gefunden = True
als Unterprogramm
def suche(wert, liste):
    for i in range(len(liste)):
        if wert==liste[i]: return True
    return False
Oft ist nicht nur wichtig, ob ein Wert als Element im Array vorkommt.
Man will auch wissen an welchem Index es im Array steht.
Als Codefragment:
gefunden = -1      
for i in range(len(werte)):
    if werte[i]==gesucht:
        gefunden = i
        break
if gefunden>=0:
    print(werte[gefunden])
als Unterprogramm
def sucheIndex(wert, liste):
    for i in range(len(liste)):
        if wert==liste[i]:
            return i
    return -1

Anzahl der Vorkommen

Wenn man nicht nur wissen will ob, sondern wie oft ein Element im Array enthalten ist, muss man den ganzen Array durchlaufen und einen Zähler jedes mal um 1 erhöhen, wenn man den gesuchten Wert findet.
Als Codefragment:
gefunden = 0      
for i in range(len(werte)):
    if werte[i]==gesucht:
        gefunden = gefunden+1
als Unterprogramm
def sucheAnzahl(wert, liste):
    anzahl = 0
    for i in range(len(liste)):
        if wert==liste[i]:
            anzahl = anzahl+1
    return anzahl

Minimum und Maximum suchen

Manchmal sucht man nicht nach einem gegebenen Wert, sondern man sucht ein Element mit einer bestimmten Eigenschaft.
Ein Beispiel hierfür ist das Minimum eines Arrays, d.h. die kleinste Zahl oder den lexographisch kleinsten Namen.
Vorgehen: Ist das Array leer, gibt es kein Minimum. Sonst:
Als Codefragment:
mini = werte[0]
for i in range(len(werte)):
    if werte[i]<mini:
        mini = werte[i]
als Unterprogramm
def min(liste):
    erg = liste[0]
    for i in range(len(liste)):
        if liste[i]<erg: erg= liste[i]
    return erg
Für das Maximum muss nur der Vergleich in der for-Schleife geändert werden.
Natürlich kann es auch interessant sein, wlechen Index das Minimum oder Maximum hat.

Aufgaben

  1. Beginnen Sie mit dem Array: namen = ["Ada", "Bea", "Bob", "Amy", "Kai", "Ali", "Tim", "Ina", "Ann", "Lee"]
    Verändern Sie das Suchen-Fragment von oben so, dass es den ersten Namen der mit einem Suchstring beginnt ausgibt. Den Suchstring darf der Benutzer eingeben.
    Ob ein String mit einem anderen beginnt können sie so testen:
    werte[0].startswith(gesucht)



    Verändern Sie ihren Code so, dass er ausgibt, wie viele Array-Elemente mit dem eingegebenen Text beginnen.

  2. Legen Sie ein Array zahlen an, wleches einige ganze Zahlen enthält.
    Ihr Unterprogramm sucheGerade(liste) soll die Anzahl gerader Zahlen zurückgeben.



  3. Schreiben Sie ein Unterprogramm suchTeil(x, start, liste).
    Hier soll x in der Zahlenliste liste gesucht werden.
    Es soll aber nicht die ganze Liste durchsucht werden, sondern nur der Bereich vom Index start bis zum Ende der Liste.
    Es soll True zurückgeben werden, wenn x gefunden wurde, ansonsten False.


    Eine Liste zum Ausprobieren:
    zahlen = [0, 4, 8, 4, -10, 7, -10, 2, 2, 3, -7, 4, -8, 2, 8, 4, -10, 2, -1, -1]


  4. Schreiben Sie ein Unterprogramm minPositiv(x, liste), welches die minimale positive Zahl ermittelt.
    Also die kleinste Zahl >0, die in der Liste enthalten ist.

    Eine Liste zum Ausprobieren:
    zahlen = [-9, 8, -4, 10, -10, 0, -4, -4, -9, -6, -10, 0, -10, 9, 9, -7, -8, 9, 10, -4, -9, -5]




  5. Schreiben Sie ein Unterprogramm such(x, liste), welches die liste nach einen Vorkommen von x durchsucht.
    Wird x gefunden, so soll das Wort aus der Liste zurückgegeben werden, ansonsten soll None zurückgeben werden.
    Hierbei soll Groß- und Kleinschreibung ignoriert werden, d.h. 'WoRt' ist das gleiche wie 'wORt'.

    Um Groß- und Kleinschreibung zu ignorieren, können Sie beim Vergleich .upper() oder .lower() verwenden, welchen einen Text in Groß- bzw. Kleinbuchstaben umwandelt.
    Ein if x.upper() == liste[i].upper(): wandelt x in Großbuchstaben um und vergleicht es mit dem Listeneintrag in Großbuchstaben.
    Eine Liste zum Ausprobieren:
    wort = ['AngENehm', 'AuSSERGEWÖhnliCH', 'bENUTZErfReUndlich', 'chAnCeNGleIch', 'einDEuTiG', 'eNgAgieRt', 'erstauNLiCh', 'fESSELnd', 'GEDEiHlICh', 'GeSTärkT', 'HARmoniSCH', 'HOChGEsCHÄTZt', 'Klug', 'LIEbENswERT', 'niEdLICH', 'PrIcKeLNd', 'saUBer', 'SPontan', 'übeRschwÄNGliCH', 'VERANTWOrTUNGsvOlL', 'VielfÄltiG', 'WirKSAm', 'ZuVERläsSiG']


  6. Überlegen Sie sich eigene Programmideen und setzten Sie diese um.