Programmierung allgemein
Von: BenjaminBlümchen123, 24.10.2010 17:33 Uhr
Hallo,
Ich habe ein Problem mit Python, ich hoffe doch ich bin hier richtig. Ich bin neu auf dem Gebiet und brauche deswegen Hilfe. Ich benutze PyScripter Portable.

Ich habe Listen mit Open Office erstellt die folgendermaßen aussehen:
['10b','Abendroth','Alisa','1993','w','krank','Turnhalle','Fotolabor','','Aula'],['10c','Unglaube','Jan','1995','m','','','','Chemiesaal',''],['10c','Wansch','Tabea','1995','w','','','','Chemiesaal','']

(Es sind insgesamt 156 Listen)
(Die Orte, die Klasse, das Jahr und ob krank oder nicht krank spielen keine Rolle)
Wie ist es jetzt möglich alle weiblichen Namen auszugeben, also all mit einem 'w' in der Liste ? Geht das überhaupt so wie ich das will, also so, dass am Ende die Namen Alisa und Tabea ausgegeben werden oder zumindest die gesamte Liste in der ein 'w' steht?
Ich bitte um Ratschläge und freundliche Hinweise.



  1. Antwort von shuber2 1
    Re: Python: Namen aus Liste ausgeben
    Hallo,


    vielleicht hilft dir der folgende Gedanke weiter, den ich in meiner python shell gesponnen habe:

    >>> a = [['10b','Abendroth','Alisa','1993','w','krank','Turnhalle','Fotolabor','','Aula'],['10c','Unglaube','Jan','1995','m','','','','Chemiesaal',''],['10c','Wansch','Tabea','1995','w','','','','Chemiesaal','']]
    >>> filter( lambda x: x[4]=='w', a)
    [['10b', 'Abendroth', 'Alisa', '1993', 'w', 'krank', 'Turnhalle', 'Fotolabor', '', 'Aula'], ['10c', 'Wansch', 'Tabea', '1995', 'w', '', '', '', 'Chemiesaal', '']]


    Mit anderen Worten: angenommen 'a' ist die Liste deiner Zeilen, dann liefert dir
    filter( lambda x: x[4]=='w', a)

    alle Zeilen, die als vierten Eintrag ein 'w' haben.
    • Antwort von KarlsFriend 1
      Re: Python: Namen aus Liste ausgeben
      Ich fürchte ich kann dir nicht so helfen, wie du dir das vorstellst.

      Es wäre für mich nicht schwer, das Programm zu schreiben, dass du brauchst. Aber dein Lehrer hat dir diese Hausaufgabe aufgegeben, damit du programmieren lernst. Er wird dir sicher auch ein paar Zettel mitgegeben haben, wo erklärt wird, wie du das machst.


      Folgende Sachen musst du wissen, um dein Problem zu lösen:

      - variablen setzen
      - print-Befehl
      - Die If-Bedingung und "=="
      - schleifen (for oder while)
      - zugriff auf einzelne elemente einer liste

      Wenn dein Lehrer dir nichts gegeben hat, oder du die Dokumente verloren hast, kannst du auch hier nachschlagen http://openbook.galileocomputing.de/python/
      • Antwort von Teabag 1
        Re: Python: Namen aus Liste ausgeben
        natürlich kannst du auch:

        liste = [DIE156LISTEN]
        for i in range(len(liste)):
        for j in range(len(liste[i])):
        if j == "W":
        print liste[i][j-2]

        dann wird direkt der NAME geprintet....
        • Antwort von flawa 1
          Re: Python: Namen aus Liste ausgeben
          Hallo Benjamin,

          aber natürlich geht das. Du willst ja die Listen nur auf das Vorhandensein des Zeichens 'w' überprüfen und in Abhängigkeit davon dann die Namen ausgeben.
          Wenn ich das richtig überblickt habe, dann ist das Feld für Geschlecht immer an 5. Stelle in der Liste vermerkt. Da Python, wie eigentlich alle Programmiersprachen auch, es erlaubt Elemente direkt zu adressieren kannst Du mit diesem Code überprüfen ob an 5. Stelle ein 'w' steht und wenn das der Fall ist die Namen ausgeben:

          for curList in container:
          if curList[4] == 'w':
          print "Vorname: %s Nachname: %s" % (curList[2],curList[1])

          Beachte, dass das die Nummerierung der Elemente bei 0 beginnt und nicht bei 1.

          Falls es jedoch nicht immer das 5. Element der Liste ist, welches das Geschlecht kodiert kannst Du mit einer zusätlichen Schleife noch überprüfen ob 'w' überhaupt in der Liste vorkommt:

          for curList in container:
          for listField in curList:
          if listField == 'w':
          print "Vorname: %s Nachname: %s" % (curList[2],curList[1])

          Ich hoffe es hilft Dir weiter. Bei weiteren Fragen, melde Dich einfach nochmal.

          Grüße,
          René
          • Antwort von flawa 1
            Re: Python: Namen aus Liste ausgeben
            Hier nochmal der ganze Code, damit Du auch meine Variablenbelegung verstehen kannst:

            container = [
            ['10b', 'Abendroth', 'Alisa', '1993', 'w', 'krank', 'Turnhalle', 'Fotolabor', '', 'Aula'],
            ['10c', 'Unglaube', 'Jan', '1995', 'm', '', '', '', 'Chemiesaal', ''],
            ['10c', 'Wansch', 'Tabea', '1995', 'w', '', '', '', 'Chemiesaal', ''] ]

            for curList in container:
            if curList[4] == 'w':
            print "Vorname: %s Nachname: %s" % (curList[2], curList[1])

            for curList in container:
            for listField in curList:
            if listField == 'w':
            print "Vorname: %s Nachname: %s" % (curList[2], curList[1])
            • Antwort von mosenturm 1
              Re: Python: Namen aus Liste ausgeben
              Hallo, Ich habe Listen mit Open Office erstellt die folgendermaßen
              aussehen:
              ['10b','Abendroth','Alisa','1993','w','krank','Turnhalle','Fotolabor','','Aula'],['10c','Unglaube','Jan','1995','m','','','','Chemiesaal',''],['10c','Wansch','Tabea','1995','w','','','','Chemiesaal','']
              Sind diese Listen schon Python Listen? D.h., kannst du diese Listen einfach über einen Namen ausgeben lassen in der Form:
              print listeA

              Ansonsten kannst du die Listenelemente über ihren Index ansprechen. Bei 0 beginnend müsstest du
              print listeA(2) eingeben, um den Vornamen zu bekommen. In einer Schleife (foreach) kannst du die Liste durchlaufen und mit if abfragen, ob das Element listeA(4) ein 'w' ist und dann ausgeben.
              (Es sind insgesamt 156 Listen)
              Viele Grüße
              • Antwort von Ralf 1
                Re: Python: Namen aus Liste ausgeben
                Hi BenjaminBlümchen,

                bei den Listen die du aus OpenOffice erzeugt hast gehe ich davon aus, dass es sich um ein mehrdimensionale Liste handelt.

                Um eine solche Liste zu durch suchen bietet es sich an eine kleine Helferfunktion zu schreiben.

                <code>
                def find(value, seq):
                results = []
                for index, item in enumerate(seq):
                if value in item:
                results.append([index, item])
                return results
                </code>

                Hier geschieht folgendes:


                • results = [] - es wird eine leere Liste erzeugt, diese enhält nachher die Treffer und wird zurück gegeben.

                • for index, item in enumerate(seq): - hier wird zeilenweise durch die übergebene Liste gelaufen und `index` die aktuelle Zeilennummer und `item` die aktuelle Zeile zugewiesen

                • if value in item: - hier wird nun überprüft ob `value` in der aktuellen Zeile enthalten ist

                • results.append([index, item]) - wenn der Wert gefunden wurde wird der Liste `results` der Index und die betreffende Zeile hinzugefügt

                • return results - liefert nachdem wir durch die Liste gelaufen sind die Resultate zurück



                Hier noch ein komplette Code Beispiel:

                <code>
                list = [['10b','Abendroth','Alisa','1993','w','krank','Turnhalle','Fotolabor','','Aula'], ['10c','Unglaube','Jan','1995','m','','','','Chemiesaal',''],['10c','Wansch','Tabea','1995','w','','','','Chemiesaal','']]

                def find(value, seq):
                results = []
                for index, item in enumerate(seq):
                if value in item:
                results.append([index, item])
                return results

                print "list search example"

                print find('m', list)
                </code>

                Wenn du nur die Zeilennummer braucht kannst du auf item bei der zurück gegben Liste verzichten.

                Hoffe das hilft dir weiter, sonst meld dich einfach.
                Hier noch ein Link zur Einführung in Listen bei Python
                http://effbot.org/zone/python-list.htm