[Code] [Python] Anfängerfrage zum Listenfiltern

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von s1nu, 31. Mai 2013 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 31. Mai 2013
    [Python] Anfängerfrage zum Listenfiltern

    Hallo Jungs.. bin grad dabei mir Python zu lernen und es lief bisher auch ganz gut.. nur jetzt entzieht sich eine Aufgabenstellung meiner Logik:

    Your job:
    print a list of all of the words in words that don't contain vowels. Use a for loop to loop through words. For each word, if it doesn't have vowels, add it to no_vowel_words. At the end, print no_vowel_words.

    Der vorgegebene Code:
    Spoiler
    {bild-down: http://img5.fotos-hochladen.net/uploads/vorgabeelahpz4rdo.png}

    Mein Lösungsansatz:
    Spoiler
    {bild-down: http://img5.fotos-hochladen.net/uploads/meinansatzcjx0msa89h.png}

    Ich weiß aber, dass das so nicht stimmen kann, weil da werden ja die nur die Buchstaben an die leere Liste "no_vowel_words" übergeben. Ich will aber die Wörter, in denen keine Selbstlaute zu finden sind in diese Liste speichern.

    Kann mir bitte jemand weiterhelfen.. Die Theorie sollte doch sein:

    1) Durchsuche die Liste "words"
    2) Durchsuche die Wörter in der Liste "words" auf Selbstlaute
    3) Speichere nur die Wörter, in denen keine Selbstlaute gefunden wurden in die Liste "no_vowel_words"
    4) Gebe die Liste "no_vowel_words" aus.

    Wo ist hier mein Denkfehler? Bitte um eure Hilfe.. hab jetzt 3 Stunden in Google rumgesucht und keine Lösung gefunden
     
  2. 1. Juni 2013
    AW: [Python] Anfängerfrage zum Listenfiltern

    Wenn ich Python richtig verstehe überprüfst du nur den einzelnen Buchstaben du musst aber das gesamte Wort erstmal überprüft haben bevor du etwas auf die Liste setzt.

    Was passiert
    1. for du nimmst ein Wort aus der Liste
    2. for du nimmst ein Buchstaben aus der Liste
    3. If Buchstabe nicht in aeiou ist
    4. dann schreib Buchstabe auf die Liste

    Du testest nicht das gesamte Wort lediglich den einzelnen Buchstaben eines Wortes.
     
    1 Person gefällt das.
  3. 1. Juni 2013
    Zuletzt bearbeitet: 1. Juni 2013
    AW: [Python] Anfängerfrage zum Listenfiltern

    Vor allem landet ein Buchstabe schon auf der no_vowel_words wenn bereits der erste Buchstabe kein Selbstlaut ist. Es kann ja dennoch einer später später vorkommen. Ich würde einfach 5 finds verknüpfen. Nicht besonders schön aber sollte funktionieren. Ungefähr so (ungetestet)
    Code:
    for word in words:
     if((word.find("a") + word.find("e") + word.find("i") + word.find("o") + word.find("u")) == -5):
     no_vowel_words.append(word)
    print no_vowel_words.append
    //edit: Alternativ tuts natürlich eine RegEx Abfrage. Damit wäre das ganze viel anpassbarer.
     
    1 Person gefällt das.
  4. 1. Juni 2013
    Zuletzt bearbeitet: 1. Juni 2013
    AW: [Python] Anfängerfrage zum Listenfiltern

    hey danke, dass is die lösung, du hast zwar beim print noch ne kleinen fehler:

    das append ist zuviel.. aber ich habe mich von der tatsache ablenken lassen, dass diese methode noch nicht im tutorial vorgekommen ist.. aber so klappts trotzdem und das is mir wichtig

    @eax: ja das siehst du richtig.. wollte zuerst ein wort rauspicken, dann das wort auf selbstlaute überprüfen und wenn dort keins drinn ist, wollt ich es der liste hinzufügen. wenn doch eins drinn ist, sollte es übersprungen werden und zum nächsten wort springen.. leider wollte das nicht so wie ich wollte.. weil ich eben nicht wusste wie ich das umsetze.

    bw gehen raus, sobalds wieder geht
     
  5. 1. Juni 2013
    Zuletzt bearbeitet: 1. Juni 2013
    AW: [Python] Anfängerfrage zum Listenfiltern

    Da die Aufgabenstellung ja war, zwei Schleifen zu benutzen, hier mal die Lösung dafür.
    (//EDIT: sehe gerade dass das gar nicht der Fall ist, aber egal ^^)
    Python bietet für solche Fälle nämlich ein nettes Feature an: den for-else-loop.
    Im Grunde ist es ganz Simpel: der Else-Zweig wird nur ausgeführt, wenn der Loop normal terminiert, also wenn er nicht vorher durch ein break abgebrochen wird.
    Hier ist es nochmal anschaulich erklärt.
    for ... else in Python

    Das machen wir uns zu Nutze:
    Code:
    lst = ["who", "what", "where", "when", "why", "sly", "shy", "bashful", "coy", "myth", "hymn"]
    no_vowel_words = []
    for word in lst:
     for buchstabe in word:
     if buchstabe in "aeiou":
     break #Bricht den inneren loop ab
     else: #Das hier wird nur ausgeführt wenn die schleife NICHT abgebrochen wurde
     no_vowel_words.append(word)
    print no_vowel_words
    
    Und jetzt noch die, in meinen Augen, schönste Lösung, mit filter und RegEx
    Code:
    import re
    lst = ["who", "what", "where", "when", "why", "sly", "shy", "bashful", "coy", "myth", "hymn"]
    print filter(lambda x: not re.findall("[aeiou]", x), lst)
     
    1 Person gefällt das.
  6. 1. Juni 2013
    AW: [Python] Anfängerfrage zum Listenfiltern

    Du könntest auch noch ein Array erstellen mit den Vokalen.
    Also

    Code:
    vowels = ["a", "e", "i", "o", "u"]
    
    und dann mit einer 2ten Schleife die Wörter auf Vorkommnisse dieser Buchstaben prüfen.
    Ums es elegant und ohne doppelte Einträge zu halten natürlich vorher mit einer Abfrage ob dieses Wort schon in der Liste steht.

    Ich denke dies wird auch der gewünschte Lösungsansatz dieser Aufgabe sein.
    Natürlich geht es, wie oben gezeigt, sehr viel schöner und einfacher.
     
    1 Person gefällt das.
  7. 4. Juni 2013
    AW: [Python] Anfängerfrage zum Listenfiltern

    Hab auch noch mal ne andere Lösung gebaut, finde ich am elegantesten:

    Code:
    words = ["who", "what", "where", "when", "why", "sly", "shy", "bashful", "coy", "myth", "hymn"]
    vowels = ["a", "e", "i", "o", "u"]
    no_vowel_words = []
    
    for word in words:
     if not any(vowel in word for vowel in vowels):
     no_vowel_words.append(word)
    
    print no_vowel_words
    
     
    2 Person(en) gefällt das.
  8. 4. Juni 2013
    AW: [Python] Anfängerfrage zum Listenfiltern

    danke.. so viele lösungen und alle klappen
     
  9. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.