Noch mehr Listenprobleme xD
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...)
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?
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.
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.
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:
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:
Code: Alles auswählen
result = list(dict.fromkeys(values))
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.
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.
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.
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.
Zuletzt geändert von Sirius3 am Mittwoch 16. September 2020, 08:10, insgesamt 1-mal geändert.
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
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
- __blackjack__
- User
- Beiträge: 14052
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@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:
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:
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:
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()
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()
Code: Alles auswählen
#!/usr/bin/env python3
def main():
while True:
print([])
if __name__ == "__main__":
main()
“Vir, intelligence has nothing to do with politics!” — Londo Mollari