Seite 1 von 1

"Ist x in der Liste?"-Problem

Verfasst: Donnerstag 18. Dezember 2014, 20:13
von oreagel
Guten Abend,

auch wenn es sich komisch anfühlt, seinen ersten Post direkt mit einer (wahrscheinlich durchaus simplen) Frage zu schreiben,
komme ich mit meinem Code hier nicht weiter. Der ist auch keine Hausaufgabe, wir hatten heute die letzte Stunde Informatik vor den Ferien (und haben nur die Kursarbeit raus bekommen, 15Pkt :mrgreen: )

Vorher kurz:

Ich habe eine Liste a = [4, 7, 11, 18, 19, 23, 27, 48].
Ich gebe eine ganze positive Zahl ein, und mein Skript soll für mich herausfinden ob die Zahl in der Liste vorhanden ist oder nicht.
Mithilfe einer while-Schleife "halbiert" das Skript die Liste immer weiter bis ich entweder zu der eingegebenen Zahl komme oder die Liste leer ist.

So weit bin ich bis jetzt: http://www.python-forum.de/pastebin.php?mode=view&s=410

Ich finde jedoch mein Problem nicht und weiß auch nicht weiter, ich weiß natürlich dass ich das einfach mit "in" prüfen könnte aber ich will ja richtig mit Listen arbeiten lernen. Hoffentlich kann mir hier jemand weiter helfen. Danke im Voraus! :)

Re: "Ist x in der Liste?"-Problem

Verfasst: Donnerstag 18. Dezember 2014, 20:30
von Sirius3
@oreagel: wie äußert sich das Problem? Gibt es eine Fehlermeldung?
Wenn Du nicht weiter kommst, hilft es, an strategisch günstigen Stellen Debugausgaben einzufügen.

Re: "Ist x in der Liste?"-Problem

Verfasst: Donnerstag 18. Dezember 2014, 20:48
von ngulam
Die Fehlermeldung ist doch eindeutig! (`int` hat keine Länge)

Zum Prüfen, ob die Eingabe ein Element der Liste ist, reicht doch ein einfaches:

Code: Alles auswählen

if x in a:
Warum dieses Stückwerk mit Listenlänge...?

Re: "Ist x in der Liste?"-Problem

Verfasst: Donnerstag 18. Dezember 2014, 20:56
von oreagel
ngulam hat geschrieben:Die Fehlermeldung ist doch eindeutig! (`int` hat keine Länge) (....)
'int' braucht doch auch gar keine Länge zu haben, es soll ja nur mit den Listeneinträgen verglichen werden, oder überseh ich da was?
ngulam hat geschrieben:Zum Prüfen, ob die Eingabe ein Element der Liste ist, reicht doch ein einfaches:

Code: Alles auswählen

if x in a:
Warum dieses Stückwerk mit Listenlänge...?
Genau das wollte ich nicht verwenden. Es ist zwar nicht falsch, aber ich wollte mir mit diesem Skript die Art der binären Suche verinnerlichen.
Der Code ist damit zwar typisches "mit Kanonen auf Spatzen schießen", aber ich glaube das ist die einfachste Methode um mir die Binäre Suche einzuprügeln.


Zu "Sirius3":
Die Python Shell gibt mir einen IndexError, "list index out of range".
Ich hab jetzt mal eine kleine Debug-Zeile eingebaut, die mir immer anzeigt wie der Stand der Liste ist.
Nun, anscheinend hatte ich vergessen, zu prüfen, ob in meiner Liste überhaupt noch eine Zahl drin steht.

Versucht habe ich jetzt, immer, wenn die Zahl nicht gefunden wurde und geprüft wird ob die Stelle kleiner/größer x ist,
soll mein Skript prüfen ob die Liste noch eine Zahl enthält.
Das habe ich mit "if len(a) != 0:" probiert, sah dann so aus:

Code: Alles auswählen

            if len(a) != 0:
                a = a[:len(a) //2] # Liste wird linksseitig halbiert
            else:
                print(x," ist nicht vorhanden.")
                t = False # Liste leer
(für x < a[len(a)//2])

Wenn ich das ganze dann ausprobiere spuckt mein Programm trotzdem das aus:
Ganze positive Zahl 14
%DEBUG% a = [4, 7, 11, 18, 19, 23, 27, 48]
%DEBUG% a = [4, 7, 11, 18]
%DEBUG% a = [11]
%DEBUG% a = []
Traceback (most recent call last):
File "F:\x in a.py", line 15, in <module>
if a[len(a)//2] == x:
IndexError: list index out of range

Edit: Hab ein neues Snippet gemacht, damit man das auch mit verfolgen kann; http://www.python-forum.de/pastebin.php?mode=view&s=411

Re: "Ist x in der Liste?"-Problem

Verfasst: Donnerstag 18. Dezember 2014, 21:05
von Sirius3
@oreagel: na da kommt dann die Überprüfung, ob die Liste leer ist, zu spät. Schau auch nochmal genau, ob die Liste in der zweiten Zeile Deiner DEBUG-Ausgabe so sein sollte.

Re: "Ist x in der Liste?"-Problem

Verfasst: Donnerstag 18. Dezember 2014, 21:14
von BlackJack
Mit ein bisschen Hilfe von der Standardbibliothek:

Code: Alles auswählen

from bisect import bisect_left

a = [4, 7, 11, 18, 19, 23, 27, 48]
b = 14
if a and a[bisect_left(a, b)] == b:
    print b, 'ist in', a, 'enthalten'

Re: "Ist x in der Liste?"-Problem

Verfasst: Freitag 19. Dezember 2014, 12:00
von oreagel
@BlackJack und @Sirius3
Danke, ich hab das jetzt mal beides berücksichtigt und es klappt alles :)

Vielen Dank an euch :)