hallo python Gemeinde,
habe folgendes Problem:
liste 1 ist vorgegeben
liste 2 wird nach und nach mit Zufallszahlen aufgefüllt
bei jedem neuen Eintrag wird liste 2 mit vorgegebener Liste 1 verglichen, ob das Ergebnis gleich ist oder nicht.
Wenn ja, soll 1 ausgegeben werden, wenn nicht, 0
Beispiel:
liste1 = [ 3,1,4 2,4,3,2,2,3 ]
liste2 = [ 1 ]
Ausgabe = 0
liste2 = [ 1,1, ]
Ausgabe = 0,1
liste2 = [ 1,1,2 ]
Ausgabe = 0,1,0
usw., bis die Anzahl der Einträge von liste 1 erreicht ist
funktionert das vieleicht mit einem Zähler? sollte ich die Ergebnisse in eine dritte Liste packen?
wäre sehr dankbar für Hilfe ...
Listen vergleichen
@haeuslermartin,
dafür eignet sich zip() sehr gut.
zum Beispiel:
zip() bildet einen Iterator aus Tupeln von jeweils benachbarten Listenelementen die man direkt in zwei getrennte Variablen (element1 und element2) entpacken kann.
Sind die Listen unterschiedlich lang, wird aufgehört sobald eins der Listenenden erreicht ist.
Oder mit einer ListComprehension, einer etwas kompaktere Form der For-Schleife um die Ergebnisse gleich in einer Liste "ergebnisse" zu speichern.
dafür eignet sich zip() sehr gut.
zum Beispiel:
Code: Alles auswählen
for element1, element2 in zip(liste1, liste2):
if element1 == element2:
...
Sind die Listen unterschiedlich lang, wird aufgehört sobald eins der Listenenden erreicht ist.
Oder mit einer ListComprehension, einer etwas kompaktere Form der For-Schleife um die Ergebnisse gleich in einer Liste "ergebnisse" zu speichern.
Code: Alles auswählen
ergebnisse = [
"1" if element1==element2
else "0"
for element1, element2
in zip(liste1, liste2)
]
- __blackjack__
- User
- Beiträge: 14065
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@haeuslermartin: Zähler nicht solange der nicht wirklich notwendig wäre, und ich sehe nicht wo der hier notwendig wäre:
Code: Alles auswählen
#!/usr/bin/env python3
from random import randint
def main():
given_numbers = [3, 1, 4, 2, 4, 3, 2, 2, 3]
random_numbers = []
results = []
for given_number in given_numbers:
random_number = randint(1, 6)
random_numbers.append(random_number)
results.append(int(random_number == given_number))
print(*results, sep=",")
if __name__ == "__main__":
main()
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Dann aber gleich die richtig kompakte Form.rogerb hat geschrieben: Montag 23. August 2021, 22:53 Oder mit einer ListComprehension, einer etwas kompaktere Form der For-Schleife um die Ergebnisse gleich in einer Liste "ergebnisse" zu speichern.Code: Alles auswählen
ergebnisse = [ "1" if element1==element2 else "0" for element1, element2 in zip(liste1, liste2) ]
Code: Alles auswählen
ergebnisse = [element1 == element2 for element1, element2 in zip(liste1, liste2)]
Ja, dann hat man eine Liste von boolean und nicht Einsen und Nullen. Man kann auch wie __blackjack__ in ein int konvertieren. Es gibt viele Möglichkeiten, je nachdem was man Ende haben möchte.Mit `element1 == element2` bekommst du ein Boolean
Bei solchen Aufgaben stellt sich zuerst die Frage, was soll geübt werden, also welches Thema wurde gerade behandelt. Da haeuslermartin diesen Kontext nicht mitgeliefert hat, sind die Antworten mehr oder minder hilfreich.
Soll hier das iterieren über eine Liste und das komplexere Verarbeiten in einer for-Schleife geübt werden, wie es __blackjack__s Lösung zeigt, oder soll hier das iterieren über mehrere Listen gleichzeitig mit einfacher Operation geübt werden, wie rogerbs Antwort?
Ist es wichtig, ein zur Weiterverarbeitung sinnvolles Ergebnis zu haben wie /mes Lösung, oder geht es mehr darum, exakt die Ausgabe zu reproduzieren?
Wir wissen das alles nicht.
Soll hier das iterieren über eine Liste und das komplexere Verarbeiten in einer for-Schleife geübt werden, wie es __blackjack__s Lösung zeigt, oder soll hier das iterieren über mehrere Listen gleichzeitig mit einfacher Operation geübt werden, wie rogerbs Antwort?
Ist es wichtig, ein zur Weiterverarbeitung sinnvolles Ergebnis zu haben wie /mes Lösung, oder geht es mehr darum, exakt die Ausgabe zu reproduzieren?
Wir wissen das alles nicht.
Ein Boolean ist ein Integer! Das lässt sich mit `isinstance(True, int)` leicht überprüfen. True entspricht der 1 und False der 0, so dass Dinge wie `(True + True) * 21` problemlos möglich sind.rogerb hat geschrieben: Dienstag 24. August 2021, 08:00 Ja, dann hat man eine Liste von boolean und nicht Einsen und Nullen.
Prinzipiell hat Sirius3 aber natürlich recht. Die Aufgabenstellung macht nicht klar, was genau gewünscht ist. Vielleicht ist es ja auch eine Hausaufgabe, die aus irgendwelchen obskuren Gründen einen Indexzugriff erwartet, so dass man z.B. mit `for in in range(min(len(liste1), len(liste2))):` arbeiten müsste.
Ich weiß! Die Darstellung ist aber unterschiedlich. Ich verstehe allerdings auch nicht worauf du hinaus willst. Ich wollte halt "1" und "0" in meinem Beispiel ausgeben.Ein Boolean ist ein Integer!
Es ging darum zu zeigen wie man elementweise über zwei Listen iterieren kann, ohne einen Zähler zu verwenden. Ich hätte die Ziffern auch in kleine Herzchen einbetten können um es etwas ansprechender zu gestallten...
-
- User
- Beiträge: 66
- Registriert: Sonntag 21. April 2013, 10:12
danke erstmal, hab gerade viel um die Ohren, und muß mich dann eingehend mit Euren Antworten beschäftigen. zur Info, ich bin kein Schüler oder Student und will auch kein Pythonexperte mehr werden mit meinen 70 Jahren, mich interessieren Zufallsaspekte und da schreib ich mir halt ab und zu kleine Anwendungen, die nur in der IDLE laufen.
Aber nochmals vielen Dank für die Antworten!
Aber nochmals vielen Dank für die Antworten!