2016-04-13 17 views
0

ich die folgende Liste hat:Python - Liste Verständnis

fruits = ['apple', 'cherry', 'banana', 'lemon'] 

Und eine Liste Verständnis mit, ich brauche eine Liste zu erzeugen, die die Früchte (in Großbuchstaben) enthält, die die Buchstaben ‚a‘ enthalten, so Apfel und Banane.

Ich habe versucht, mit:

small=[s.upper() for s in fruits for c in s if c=='a'] 

Aber es gibt mir ein Ergebnis mit Duplikaten:

['APPLE', 'BANNANA', 'BANNANA', 'BANNANA'] 

, wie ich das beheben kann? Danke!

Antwort

5
[s.upper() for s in fruits if 'a' in s] 
+0

großartig, vielen Dank! – Gambit2007

4
[s.upper() for s in fruits if 'a' in s] 

Der Grund Ihrer Liste Verständnis nicht der Fall funktioniert, weil es so erweitert:

result = [] 
for s in fruits: 
    for c in s: 
     if c == 'a': 
      result.append(s.upper()) 

Dies wird in fruit durch jedes Zeichen gehen und all die Früchte behalten, dass ein ‚a‘ in sie, im Verhältnis zu wie oft "a" in jeder Frucht erscheint.

+0

aber dann gibt es mir nur 'APPLE' und nicht 'BANANA' ... das Wort muss nicht unbedingt mit 'a' beginnen, es könnte es irgendwo enthalten. – Gambit2007

+0

@ Gambit2007: Das war mir nicht klar. Bearbeitete meine Antwort auf die richtige Antwort. –

+1

Ausgezeichnete Antwort in Anbetracht dieser ist die einzige, die erklärt, warum es Duplikate gab! –

0
[fruit.upper() for fruit in fruits if 'a' in fruit] 

Liste Verständnis kann ein bisschen schwer zu verstehen. In diesem Fall sollte es von der Mitte aus gelesen werden. Du fährst über alle Früchte (ja, ich weiß ...), filtere nur diejenigen mit 'a' und wandle sie dann in Großbuchstaben um.

+0

Ja, ja, ein Tippfehler. – zmbq

1

Sie haben zwei for-Schleifen, aber Sie brauchen nur eine. Außerdem überprüfen Sie nur das erste Zeichen für "a", aber aus dem Text, den ich verstehe, könnte "a" irgendwo in der Eingabe erscheinen. Auch wenn dies in Ihrem Beispiel nicht der Fall ist, nehme ich an, dass es auch für nicht kleingeschriebene Eingabezeichenfolgen (wie "Apple") funktionieren sollte. Sie sollten daher die Zeichenfolge lower() vor dem Vergleich mit 'a' eingeben.

Verwandte Themen