2016-05-18 3 views
0

В настоящее время я работаю над скриптом python, который возьмет строку, преобразует ее в список и удалит все гласные. Затем он выводит окончательный результат в виде строки. Тем не менее, итеративная функция, которую я использую, выводит каждый результат, будь то гласный или нет. Я попытался обратить вспять и только сохранить согласные, но безуспешно. Ниже приведен код, который я использовал.Iterative if function

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

Любое понимание будет оценено по достоинству.

ответ

2

Эта линия:

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

создает список с пятью элементами (каждый из которых является True или False).
Например, если x является 'e', это создаст список

[False, True, False, False, False] 

Если x не гласный, это создаст список

[False, False, False, False, False] 

Любой непустой список истинно, так условие if выполнено.


Что вы имеете в виду, чтобы спросить "делает x.lower() равен y для любого y в моем списке гласные?", Которая заключается в следующем:

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

или более лаконично:

if x.lower() in "aeiou": 

Если вы хотите проверить, является ли письмо не гласным, это будет:

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

Большое спасибо, это исправлено для меня :) – Kamg300

1

Я не совсем уверен, что сделали вы пытаетесь сделать там, но это делает его ...

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

#: Hello there! 
Hll thr! 

Еще более эффективным подходом было бы:

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

Не понимал, что это может быть уплотнено этим! Большое спасибо. – Kamg300

0

Первое, строка итератор так же, как список, чтобы не нужно типаж строку в список.

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

Сканирует список 5 раз. –