2 Listen vergleichen und gleiche(s) Element(e) ausgeben?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 2 Listen vergleichen und gleiche(s) Element(e) ausgeben?

    Hey!

    Ich bin wie ihr sehen könnt gan ganz neu hier, also noch richtig frisch und hab gleich mal ein kleines Problem, auf das noch keine Lösung gefunden habe. Muss dazu aber auch sagen, das ich mich in Python noch nicht so gut auskenne, weil ich das erst seit knapp 3-4 Wochen erlerne.

    Nun zum Problem: Ich habe 2 Listen und lasse diese auf Übereinstimmungen vergleichen. Klappt wunderbar, am Ende krieg ich dann auch angezeigt, wieviele Übereinstimungen es gibt, ABER ich möchte nun auch, das angezeigt wird, welche 2 Listenelemente übereinstimmen. Bsp: In Liste 1 und in Liste 2 findet sich jeweils ein Element mit dem Wert "Hosenscheißer", so wie es momentan ist, bekomme ich dann angezeigt: Eine Übereinstimmung gefunden, ich möchte nun aber auch angezeigt bekommen: Die Übereinstimmung ist: "Hosenscheißer".

    Der bisherige Code zum Vergleichen der Listen:

    Quellcode

    1. def match_lists(list1, list2):
    2. # to find the number of matching items in each list use sets
    3. set1 = set(list1)
    4. set2 = set(list2)
    5. # set3 contains all items comon to set1 and set2
    6. set3 = set1.intersection(set2)
    7. # return number of matching items
    8. return len(set3)


    Wie kann man das nun erweitern um dann auch angezeigt zu bekommen, welche Elemente übereinstimmen?

    Ich hoffe mir kann jemand weiterhelfen.

    Danke

    Opa
  • hm.. wir hatten heute die allererste Python vorlesung.
    Ich bin sicher, bald kann ich dir besser helfen, für heute muss dir diese Antwort genügen:

    schau dir mal die compare Funktion der Differ Klasse an:
    http://docs.python.org/lib/differ-objects.html#l2h-472

    Hier das Beispiel:

    Quellcode

    1. >>> text1 = ''' 1. Beautiful is better than ugly.
    2. ... 2. Explicit is better than implicit.
    3. ... 3. Simple is better than complex.
    4. ... 4. Complex is better than complicated.
    5. ... '''.splitlines(1)
    6. >>> len(text1)
    7. 4
    8. >>> text1[0][-1]
    9. '\n'
    10. >>> text2 = ''' 1. Beautiful is better than ugly.
    11. ... 3. Simple is better than complex.
    12. ... 4. Complicated is better than complex.
    13. ... 5. Flat is better than nested.
    14. ... '''.splitlines(1)
    15. >>> d = Differ()
    16. >>> result = list(d.compare(text1, text2))
    17. >>> from pprint import pprint
    18. >>> pprint(result)
    19. [' 1. Beautiful is better than ugly.\n',
    20. '- 2. Explicit is better than implicit.\n',
    21. '- 3. Simple is better than complex.\n',
    22. '+ 3. Simple is better than complex.\n',
    23. '? ++ \n',
    24. '- 4. Complex is better than complicated.\n',
    25. '? ^ ---- ^ \n',
    26. '+ 4. Complicated is better than complex.\n',
    27. '? ++++ ^ ^ \n',
    28. '+ 5. Flat is better than nested.\n']
    Alles anzeigen


    Python ist zwar bekannt dafür alles "built-in" zu haben. Doch warum nicht einfach mit einer Schleife durchiterieren und die einzelnen Strings vergleichen?

    Ist dein Text sehr groß?
  • Hey!

    So hab's doch noch gelöst ;)

    ich habe einfach noch ne 2. Funktion geschrieben:

    Quellcode

    1. def matches_out(list1, list2):
    2. set1 = set(list1)
    3. set2 = set(list2)
    4. # set3 contains all items comon to set1 and set2
    5. set3 = set1.intersection(set2)
    6. #return matches
    7. found = []
    8. for match in set3:
    9. found.append(match)
    10. return found


    und so wird das dann im "Hauptteil" ausgewertet:

    Quellcode

    1. found = matches_out(comp_list, user_list)
    2. count_matches = len(found)
    3. if count_matches == 6:
    4. print "Sie haben sechs Zahl richtig getippt!", matches_out(comp_list, user_list)
    5. elif count_matches == 5:
    6. print "Sie haben fünf Zahl richtig getippt!", matches_out(comp_list, user_list)
    7. elif count_matches == 4:
    8. print "Sie haben vier Zahl richtig getippt!", matches_out(comp_list, user_list)
    9. elif count_matches == 3:
    10. print "Sie haben drei Zahl richtig getippt!", matches_out(comp_list, user_list)
    11. elif count_matches == 2:
    12. print "Sie haben zwei Zahl richtig getippt!", matches_out(comp_list, user_list)
    13. elif count_matches == 1:
    14. print "Sie haben eine Zahl", matches_out(comp_list, user_list) ,"richtig getippt!"
    15. elif count_matches == 0:
    16. print "Sie haben leider keine Zahl richtig getippt!", matches_out(comp_list, user_list)
    Alles anzeigen


    Sieht dann auf den Bildschirm so aus:

    Die Lottozahlen: [3, 8, 22, 30, 31, 40]
    Ihre Lottozahlen: [1, 2, 3, 4, 5, 6]
    ******************************************
    Es wurde(n) 1 Übereinstimmungen gefunden
    Sie haben eine Zahl [3] richtig getippt!
  • "Opa114" schrieb:

    Hey!
    So hab's doch noch gelöst ;)
    ich habe einfach noch ne 2. Funktion geschrieben:

    Quellcode

    1. def matches_out(list1, list2):
    2. set1 = set(list1)
    3. set2 = set(list2)
    4. # set3 contains all items comon to set1 and set2
    5. set3 = set1.intersection(set2)
    6. #return matches
    7. found = []
    8. for match in set3:
    9. found.append(match)
    10. return found



    Hast du schonmal folgendes probiert?

    Quellcode

    1. def matches_out(list1, list2):
    2. set1 = set(list1)
    3. set2 = set(list2)
    4. set3 = set1.intersection(set2)
    5. list3 = list(set3)
    6. return list3


    Bei mir hats zumindest funktioniert:

    Quellcode

    1. >>> l1 = [1,2,3,4,5]
    2. >>> l2 = [3,4,5,6,7]
    3. >>> s1 = set(l1)
    4. >>> s2 = set(l2)
    5. >>> s3 = s1.intersection(s2)
    6. >>> l3 = list(s3)
    7. >>> print l3
    8. [3, 4, 5]


    Oder für ganz tippfaule:

    Quellcode

    1. def matches_out(list1, list2):
    2. return list(set(list1).intersection(set(list2)))