2016-05-18 10 views
0

Ich arbeite derzeit an einem Python-Skript, das eine Zeichenfolge nimmt, in eine Liste konvertiert und dann alle Vokale entfernt. Es druckt dann das Endergebnis als eine Zeichenkette aus. Die iterative Funktion, die ich verwende, gibt jedoch jedes Ergebnis aus, egal ob es ein Vokal ist oder nicht. Ich habe versucht umzukehren und nur die Konsonanten zu halten, aber ohne Erfolg. Unten ist der Code, den ich verwendet habe.Iterative if-Funktion

string = input("#: ") 
new_list = [] 

for x in list(string): 
    if [x.lower() == y for y in list("aeiou")]: 
     global new_list 
     new_list.append(x) 

print(''.join(new_list)) 

Jeder Einblick würde geschätzt werden.

Antwort

2

Diese Zeile:

if [x.lower() == y for y in list("aeiou")] 

erstellt eine Liste mit fünf Elementen (von denen jeder True oder False).
Zum Beispiel, wenn x'e' ist, wird es die Liste

[False, True, False, False, False] 

erstellen Wenn x kein Vokal ist, wird es die Liste

[False, False, False, False, False] 

Jede nicht-leere Liste ist wahr, erstellen Sie so die if Bedingung ist erfüllt.


Was meinen Sie zu fragen, ist "tut x.lower() gleich y für jede y in meiner Liste der Vokale?", Was das ist:

if any(x.lower()==y for y in list("aeiou")): 

oder kurz und bündig:

if x.lower() in "aeiou": 

Wenn Sie überprüfen möchten, ob ein Buchstabe nicht ein Vokal ist, wäre es dies:

if x.lower() not in "aeiou": 
+0

Vielen Dank, das hat es für mich behoben :) – Kamg300

1

Ich bin nicht ganz sicher, was hast du versuchen, es zu tun, aber das tut es ...

string = input("#: ") 
print(''.join([x for x in string if x.lower() not in "aeiou"])) 

#: Hello there! 
Hll thr! 

noch effizienter Ansatz wäre:

print(input("#: ").translate(str.maketrans("","","aeiou"))) 
+0

Ich wusste nicht, dass es durch so viel verdichtet werden könnte! Danke vielmals. – Kamg300

0

Das erste, was ein String ist ein Iterator wie eine Liste, so dass keine Notwendigkeit, eine Zeichenfolge typisieren aufzulisten.

s = "your_string_goes_here".lower() 

s = s.replace('a', '') 
s = s.replace('i', '') 
s = s.replace('e', '') 
s = s.replace('o', '') 
s = s.replace('u', '') 
print s 
+0

Dies scannt die Liste 5 mal. –