Arbeiten mit mehreren Listen

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
reza331
User
Beiträge: 25
Registriert: Sonntag 9. Juni 2019, 21:39

Hallo
Ich habe eine 1. Liste mit Namen. Dann habe ich noch eine 2. Liste in der Namen und anderer Text drin stehen. Jetzt möchte ich aber nur die Namen haben und den Text wegmachen. Ich möchte überprüfen ob die Namen aus der 1. Liste in der 2. Liste sind falls ja sollen diese Namen, also ohne Text in eine dritte Liste geschrieben werden. Dabei ist mir wichtig, dass die Namen in der 3. Liste so oft drin stehen wie Sie vorkommen, also das z. B. ein Name der 10 mal in Liste 2 steht auch 10 mal in der 3. Liste vorhanden ist.

Ich habe schon schon so viel ausprobiert. Ich bin Anfänger, aber irgendwie klappt es nicht. Die Listen sin d sehr sehr groß mit sehr vielen Namen. Die 2 Listen im folgenden sind nur ein Beispiel:

1_Liste = ['Hans', 'Tim', 'Eleke', 'Peter']
2_Liste = ['Hans ist im Haus, dann ist Hans in den Garten gegangen.' 'Hans ist froh Elke zu sehen.' Elke wartet auf Tim.' 'Tim ist der Freund von Peter']
3_Liste = [ ]

Ich habe das bisher gemacht aber das klappt nicht:
for element in 2_Liste:
if 1_Liste in element:
3_Liste.append(1_Liste)
print(3_Liste)

Es wäre sehr nett wenn Ihr mir weiterhelfen könnt

MFG
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du suchst zip. Und du solltest sehr, sehr, sehr dringend bessere Namen vergeben, Liste_1 bist Liste_1000 ist eine ganz schlechte Angewohnheit, die du gleich bekaempfen solltest.

Code: Alles auswählen

for needle, haystack in zip(namen, saetze):
     if needle in haystack:
           ...
reza331
User
Beiträge: 25
Registriert: Sonntag 9. Juni 2019, 21:39

__deets__ hat geschrieben: Dienstag 9. Juli 2019, 15:27 Du suchst zip. Und du solltest sehr, sehr, sehr dringend bessere Namen vergeben, Liste_1 bist Liste_1000 ist eine ganz schlechte Angewohnheit, die du gleich bekaempfen solltest.

Code: Alles auswählen

for needle, haystack in zip(namen, saetze):
     if needle in haystack:
           ...
Vielen Dank erstmal, aber ich verstehe leider nicht wie das gemeint ist, ist needle die 1. Liste und haystack die 2 Liste, aber wo ist dann die 3. Liste? Und was ist mit dem ('name, saetze') gemeint.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

@__deets__: Das klappt mit zip nicht, da alle Namen aus Liste 1, die auch irgendwo in Liste 2 vorkommen, wie folgt gesucht werden müssen:

Code: Alles auswählen

def name_in_sentences(name):
    for sentence in sentences:
        if name in sentence:
            return True
    return False

names_in_sentences = [name for name in names if name_in_sentences(name)]
(ungetestet)
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

@kbr: das ist eine interpretationsfrage. Klar ist mein Code nur korrespondierend. So habe ich den TE verstanden. Wenn es nur wichtig ist das irgend ein Name irgendwo vorkommt, dann muss man natürlich so wie du vorgehen.

@reza331: die dritte Liste musst du anlegen und befüllen. Ich habe dir nur gezeigt wie man paarweise Elemente erzeugt. Die Bemerkung von kbr ist natürlich dann zu bedenken, wenn es eben nicht paarweise sein soll. Sondern jeder Name in jedem Satz gesucht werden soll.
reza331
User
Beiträge: 25
Registriert: Sonntag 9. Juni 2019, 21:39

kbr hat geschrieben: Dienstag 9. Juli 2019, 15:57 @__deets__: Das klappt mit zip nicht, da alle Namen aus Liste 1, die auch irgendwo in Liste 2 vorkommen, wie folgt gesucht werden müssen:

Code: Alles auswählen

def name_in_sentences(name):
    for sentence in sentences:
        if name in sentence:
            return True
    return False

names_in_sentences = [name for name in names if name_in_sentences(name)]
(ungetestet)
Danke erstmal, aber leider funktioniert es bei mir nicht. Kannst du mir bitte sagen wo ich 1_Liste, 2_Liste, und 3_LIste da genau in deine Funktion einsetzen muss. Ich weiß das das so nicht gut ist, wie ich die Listen nenne aber so verstehe ich das besser. Ich wollte zum Schluß eine 3. Liste habe, wo alle name drinnen stehen.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn du eine Liste mit Namen hast, und hier kommt eine for-Schleife ueber etwas vor das "names" heisst - was glaubst du koennte die beinhalten? Das gleiche gilt fuer "sentences". So viel Transferleistung schaffst du ganz bestimmt auch ohne das dir das einer hinschreibt.
Benutzeravatar
__blackjack__
User
Beiträge: 13116
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ansonsten würde ich dringend ein Grundlagentutorial empfehlen, wo so wirklich grundlegende Sachen wie Listen und Schleifen erklärt werden. In der Python-Dokumentation gibt es zum Beispiel ein Tutorial das man mal durchgearbeitet haben sollte.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten