Seite 1 von 1
Noch mehr Listenprobleme xD
Verfasst: Mittwoch 16. September 2020, 07:38
von 19mareut
ich wollt mal wissen, wie ich das hinbekomme, aus einer Liste mit strings als Elementen ein neues Element hinzufügen möchte, aber das soll nur dann hinzugefügt werden, wenn es das elemnt darin noch nicht gibt. sonst wird das einfach aus dem speicher gelöscht und die nächste anweisung wird gemacht (jaja es is ne schleife, also der nächste schritt in der schleife aber ja...)
Re: Noch mehr Listenprobleme xD
Verfasst: Mittwoch 16. September 2020, 07:39
von 19mareut
ah ja es sind verdammt viele stings (sowohl in den listen, als auch in die, die dazukommen) also obs nen befehl gibt oder ob ichs selber schreiben muss wollt ich eig nur wissen. wenns nen befehl gibt dann könntet ihr mir den pls verraten xD?
Re: Noch mehr Listenprobleme xD
Verfasst: Mittwoch 16. September 2020, 07:41
von sparrow
Bei diesen Posts ohne Satzzeichen fallen mit die Fußnägel aus.
Entweder musst du prüfen, ob das Element, das du einfügen möchtest, bereits in der Liste ist - oder du schaust dir statt einer Liste mal Set und dessen Eigenschaften an.
Re: Noch mehr Listenprobleme xD
Verfasst: Mittwoch 16. September 2020, 07:52
von 19mareut
ja. ok. sorry. ich mach mehr satzzeichen, meinetwegen ^^. (tml) ja dankeschön ich google mal.
Re: Noch mehr Listenprobleme xD
Verfasst: Mittwoch 16. September 2020, 07:55
von snafu
Die Lösung hängt auch davon ab, inwieweit die Reihenfolge der Elemente erhalten bleiben soll. Für Sets ist diese Reihenfolge nicht definiert, sodass man sich nicht darauf verlassen kann, an welcher Stelle im Set z.B. das erste Element aus dem Datensatz landen wird. Sofern einem das wichtig ist, muss man leider doch wieder eine Schleife schreiben.
Oder man nutzt in einem aktuellen Python den Umstand, das Wörterbücher diese Garantie der Reihenfolge mittlerweile geben. Insofern würde auch dies zum Erfolg führen:
Re: Noch mehr Listenprobleme xD
Verfasst: Mittwoch 16. September 2020, 07:57
von 19mareut
mir ist das eigentlich relativ egal ich wollte nur alle unterschiedlichen wörter da drinne stehen haben.
Re: Noch mehr Listenprobleme xD
Verfasst: Mittwoch 16. September 2020, 07:58
von 19mareut
die reihenfolge mein ich sorry
Re: Noch mehr Listenprobleme xD
Verfasst: Mittwoch 16. September 2020, 08:07
von 19mareut
ok ich schicks mal rüber:
also ich möchte ein Wort eingeben und dann alle möglichen anderen Wortkonstellationen haben die es gibt. also wenn ich 'ese' eingebe will ich rausbekommen 'ese','see','ees'. Dabei ist die Reihenfolge, in der er mir das ausgibt, egal. Der einfachheit halber lass ich die random Generieren und möchte nur testen lassen, ob es das Wort schon in der Liste gibt.
Re: Noch mehr Listenprobleme xD
Verfasst: Mittwoch 16. September 2020, 08:07
von Sirius3
Um zu prüfen, ob ein Element in der Liste ist, gibt es den in-Operator. Effizienter sind Sets. Wenn Dir die Reihenfolge egal ist, dann packe gleich alles in Sets.
EDIT: die Aufgabenstellung gab es vor einigen Wochen hier schon einmal. Random ist wenig effektiv, weil Du ja auch nie weißt, ob Du alle Varianten hast. Der triviale Weg ist itertools.combinations.
Re: Noch mehr Listenprobleme xD
Verfasst: Mittwoch 16. September 2020, 08:08
von 19mareut
import random
x = 0
u = 0
nam = input('Lol:')
n = len(nam)
wort = []
if n != 0:
def fakultät(n):
if n == 0:
fak = 1
else:
fak = n * fakultät(n-1)
return fak
v = fakultät(n)
else:
v = 1
while len(wort) > u:
wort = wort + nam
u += 1
while v > x:
name = random.shuffle(wort)
result = list(dict.fromkeys(name))
print(result)
v = v + 1
Re: Noch mehr Listenprobleme xD
Verfasst: Mittwoch 16. September 2020, 08:12
von 19mareut
das Lol war nur dazu da, um zu testen, ob das Programm überhaupt anläuft
Re: Noch mehr Listenprobleme xD
Verfasst: Donnerstag 17. September 2020, 11:35
von __blackjack__
@19mareut: Und nun? Da bekommt man ja eine deutliche Fehlemeldung. Was ist an der nicht klar?
Bitte Fehler oder unerwartetes Verhalten beschreiben und Fehlermeldungen/Ausnahmen+Tracebacks 1:1 in den Beitrag kopieren.
Und Quelltext bitte in Code-Tags setzen, damit die in Python wichtige Einrückung sichtbar bleibt und aus Syntax wie `i` oder `u` in eckigen Klammern kein kursiv gesetzter oder unterstrichener Text im Beitrag wird.
Ansonsten gelten hier auch wieder die gleichen Anmerkungen wie bei anderem Code von Dir: Da sind unheimlich viele unnötige Leerzeilen drin und die Namen sind fast alle schlecht gewählt.
Wenn Du das Bedürfnis hast nahezu jede zweite Zeile frei zu lassen, dann ist das wohl eher ein Problem bei Dir mit der Anzeige. Such Dir einen Editor bei dem man den Abstand zwischen zwei Zeilen konfigurieren kann, wenn Du da mehr Platz brauchst/haben möchtest, und löse dieses optische Problem nicht durch Leerzeilen die anderen das lesen schwerer machen.
Die Definition der Fakultätsfunktion gehört auf Modulebene und nicht in das ``if``. Wobei man sich das auch komplett sparen kann, denn in der Standardbibliothek gibt es bereits `math.factorial()`.
Was man sich als nächstes sparen kann (auch mit der eigenen Fakultätsfunktion) ist das ``if``/``else`` an der Stelle, denn die Fakultät von 0 ist 1. Das ist also überhaupt kein Sonderfall den man hier einzeln behandeln muss.
Namen definiert man dort wo man sie dann auch verwendet, nicht alle am Anfang mal auf Vorrat.
Dann wären wir bei diesem Zwischenstand:
Code: Alles auswählen
#!/usr/bin/env python3
import math
import random
def main():
text = input('text: ')
u = 0
wort = []
while len(wort) > u:
wort += text[u]
u += 1
v = math.factorial(len(text))
x = 0
while v > x:
name = random.shuffle(wort)
result = list(dict.fromkeys(name))
print(result)
v += 1
if __name__ == "__main__":
main()
Schauen wir uns da die erste ``while``-Schleife an. Da kann man alles weglassen ausser dem ``wort = []`` denn die Schleife wird nie durchlaufen weil schon vor dem ersten Durchlauf die Länge von `wort` (0) nicht grösser als `u` (0) ist.
Bei der zweiten Schleife wissen wir das `v` mindestens 1 ist. Und `x` immer 0 bleibt. Womit das einfach eine Endlosschleife ist. Wofür weder `v` noch `x` irgendwie gebraucht werden. Wo dann auch die Fakultätsfunktion überhaupt nicht mehr gebraucht wird. Und der eingegebene Text wird dann auch für nichts mehr verwendet.
Neuer Zwischenstand:
Code: Alles auswählen
#!/usr/bin/env python3
import random
def main():
wort = []
while True:
name = random.shuffle(wort)
result = list(dict.fromkeys(name))
print(result)
if __name__ == "__main__":
main()
Nun macht ein Mischen einer garantiert immer leeren Liste überhaupt keinen Sinn, und auch das Ausfiltern von doppelten Elementen aus einer leeren Liste nicht. Bleibt am Ende effektiv das hier übrig:
Code: Alles auswählen
#!/usr/bin/env python3
def main():
while True:
print([])
if __name__ == "__main__":
main()