Listen vergleichen und gemeinsame Werte ausgeben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Habe1Frage
User
Beiträge: 2
Registriert: Donnerstag 5. April 2018, 17:28

Wie kann man 2 oder auch mehrere Listen vergleichen und die gemeinsamen Werte oder Strings ausgeben?

z.B.

wochentag = ["montag", "dienstag", mittwoch", "donnerstag", "freitag"]
lieblingstag = ["dienstag", "freitag", "samstag", "sonntag"]

...

Wie würde es weitergehen, dass das Programm (in dem Fall Dienstag und Freitag) die gleichen Werte ausgibt?

Vielen Dank schonmal!
Joshuah992
User
Beiträge: 16
Registriert: Samstag 3. März 2018, 13:27

Hi ^.^

also ich würds so machen:

Code: Alles auswählen


wochentag = ["montag", "dienstag", "mittwoch", "donnerstag", "freitag"]
lieblingstag = ["dienstag", "freitag", "samstag", "sonntag"]

gemeinsame_tage = []

for i in lieblingstag:
    if i in wochentag:
        gemeinsame_tage.append(i)

Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Joshuah992: hört sich für mich ein bißchen nach Hausaufgabe an. `i` ist ein schlechter Name, da man da gleich an eine Zahl denkt, `tag` wäre passender.
Joshuah992
User
Beiträge: 16
Registriert: Samstag 3. März 2018, 13:27

@Sirius3 Stimmt, "tag" ist besser. Aber laut einem seltsamen Uniprofessor soll man eh englische Namen für Variablen benutzen, von daher dachte ich 'zu Vorführungszwecken reichts' :P
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Und ich würds so machen:

Code: Alles auswählen

wochentag = ["montag", "dienstag", "mittwoch", "donnerstag", "freitag"]
lieblingstag = ["dienstag", "freitag", "samstag", "sonntag"]
print(*set(wochentag).intersection(lieblingstag), sep=', ')
Habe1Frage
User
Beiträge: 2
Registriert: Donnerstag 5. April 2018, 17:28

also danke erstmal für die ganze hilfe von euch. Und nein, es war keine hausaufgabe. Schreibe ein größeres Programm und habe meine Frage sehr vereinfacht dargestellt. Trotzdem nochmals danke
Benutzeravatar
DeaD_EyE
User
Beiträge: 1017
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Die Lösung von Joshuah992 ist eine, die der Lehrer erwarten könnte.
Hier wird halt gezeigt wie man es "zu Fuß" machen kann. Ist aber nicht pythonic.

Genau für diesen Zweck gibt es die Funktion zip().
Zip könnte man am besten als Reißverschluss bezeichnen.
Es fügt zwei oder mehrere Listen zusammen. Man kann auch ein Transpose (Zeilen mit Spalten tauschen) machen, wie man es Excel kennt.

Code: Alles auswählen

liste1 = [1,2,3]
liste2 = [4, 5]

for l1, l2 in zip(liste1, liste2):
    print(l1, l2)
Was mit unterschiedlich langen Listen passiert, siehst du, wenn du das Beispiel ausprobierst.
Wenn du etwas haben möchtest, dass mit unterschiedlich langen Listen arbeitet, musst du nach itertools.zip_longest gucken.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

@Dead_Eye was hat denn zip hiermit zu tun? Die Verpaarung hilft doch nicht für einen Test auf enthalten sein.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1017
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Ach mist, stimmt.
Habe nur die beiden Listen kurz gesehen und zu schnell geantwortet.
Ne, dann geht es mit zip natürlich nicht.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten