Python: Namen aus Liste ausgeben

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.

hey,
hast du die ganzen listen denn in einer anderen liste ?
oder wie sind die abgespeichert ?
ansonsnten köntest du,
angenommen du hast
liste = [DIE156LISTEN]
for i in range(len(liste)):
for j in range(len(liste[i])):
if j == „W“:
print liste[i][j]

Ganz einfach, das nötige steht in
http://docs.python.org/tutorial/datastructures.html#…

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

#alle herausfilter die weiblich sind,
auswahl = [li for li in alleListen if li[4]=='w']

#mit den Treffern kannst du weiterarbeiten
for li in auswahl:
 print(li[2])

ciao

Hallo,

Ich habe ein Problem mit Python, ich hoffe doch ich bin hier
richtig.
[‚10b‘,‚Abendroth‘,‚Alisa‘,‚1993‘,‚w‘,‚krank‘,‚Turnhalle‘,‚Fotolabor‘,’’,‚Aula‘],[‚10c‘,‚Unglaube‘,‚Jan‘,‚1995‘,‚m‘,’’,’’,’’,‚Chemiesaal‘,’’],[‚10c‘,‚Wansch‘,‚Tabea‘,‚1995‘,‚w‘,’’,’’,’’,‚Chemiesaal‘,’’]
Wie ist es jetzt möglich alle weiblichen Namen auszugeben,

Das sollte mit einem kurzen python-Script zu machen sein, ich würde etwas in der Art hier vorschlagen („Liste“ wäre dann eine dieser Listen der [] Datensätze von Kindern):

Liste = ([‚10c‘, …], [‚10b‘, …], …)
for Kind in Liste: if (Kind[4] == ‚w‘): print Kind[2]+Kind[1]

Das sollte dann folgene Ausgabe ergeben:

Alisa Abendroth
Tabea Wunsch

Ich kenne PyScripter nicht, habe aber gelesen dass dieses mit Python 2.6 und 3.0 arbeitet, obiger Code sollte in beiden Fällen funktionieren.

Viel Erfolg damit!
Falls dies noch nicht das gewnschten Ergebnis bringt, ich stehe gerne zu Rückfrage zur Verfügung.

Grüße

Hallo,

ich setze voraus, alle Ihre Listen habe die gleiche Länge, das Geschlecht steht stets an der gleichen Stelle und Sie haben eine weitere Liste, die alle 156 genannten Listen enthält.

>>> alleListen = [[‚10b‘,‚Abendroth‘,‚Alisa‘,‚1993‘,‚w‘,‚krank‘,‚Turnhalle‘,‚Fotolabor‘,’’,‚Aula‘],[‚10c‘,‚Unglaube‘,‚Jan‘,‚1995‘,‚m‘,’’,’’,’’,‚Chemiesaal‘,’’],[‚10c‘,‚Wansch‘,‚Tabea‘,‚1995‘,‚w‘,’’,’’,’’,‚Chemiesaal‘,’’] ]

dann können Sie mit einer for-Schleife bequem über diese Liste laufen und an eine Bedingung geknüpft Liste oder Namen ausgeben:

>>> for liste in alleListen:
>>> if liste[4] == ‚w‘:
>>> print liste # Gibt die ganze Liste aus
>>> print liste[1] # Gibt den Nachnamen aus
>>> print liste[2] # Gibt den Vornamen aus

ich hoffe, ich kann Ihnen damit helfen. Ansonsten kann ich Ihnen nur empfehlen, das Problem objektorientiert zu lösen; das ist wesentlich eleganter und obendrein auch sicherer :wink:

Grüße

Hallo Benjamin Blümchen,

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.

PyScripter Portable kenne ich gar nicht, habe ich also auch noch nie benutzt. Im Folgenden gehe ich davon aus, dass eine Ausgabe mit „print“ möglich und auch das gewünschte Resultat ist.

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?

Annahme: Die 156 Listen sind in einer Gesamtliste „listen“ gespeichert. Dann gibt es viele Möglichkeiten:

Einfachste möglichkeit:

for liste in listen: # über alle listen iterieren
 if liste[4] == "w": #achtung, 0-basiert
 print vorname 

Besser, weil "sprechende" Bezeichner:


    
    for klasse, nachname, vorname, jahrgang, geschlecht, krank, ort1, ort2, ort3, ort4 in listen:
     if geschlecht == "w":
     print vorname




oder mit ein wenig Python-Magie:


    
    print "\n".join(vorname for klasse, nachname, vorname, jahrgang, geschlecht, krank, ort1, ort2, ort3, ort4 in listen if geschlecht == "w")




Das ganze klingt sehr nach einer Hausaufgabe. Wenn dem so ist, mach dir bitte die Mühe, das Problem und die Lösung zu verstehen. Wenn du damit Probleme hast, passiert es dir sonst ganz schnell, dass du abgehängt wirst und den Rest des Schuljahrs nichts oder nur wenig verstehst. 

Wenn du allein damit nicht weiterkommst, such dir bitte einen Mitschüler, der das kann und lass es dir erklären. Das tut der lieber als du selbst wahrscheinlich denkst.

Liebe Grüße,
Matthias

Vielen Dank für deine Antwort, funktioniert jetzt super !

Auch dir Danke, das Problem ist gelöst !

Danke für deine Antwort, hat das Problem super gelöst !

hat auch so funktioniert, vielen Dank

Vielen Dank für deine Antwort, funktioniert echt super. Ja, es ist tatsächlich eine Hausaufgabe gewesen und mit anderen Mitschülern habe ich mich schon in Verbindung gesetzt. Durch einen simplen Abschreibefehler konnten wir allerdings nicht auf das Ergebnis kommen. Auch die links anderer User haben mir sehr weitergeholfen.
Vielen Dank !

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.

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/

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…

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é

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])

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

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.

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

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:

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)

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