函数

时间:2016-05-18 13:10:30

标签: python python-3.x if-statement iteration

我目前正在处理一个python脚本,它将获取一个字符串,将其转换为列表,然后删除所有元音。然后它将最终结果打印出来作为字符串。但是,我正在使用的迭代函数输出每个结果,无论它是否是元音。我试过逆转而只保留辅音,但无济于事。以下是我正在使用的代码。

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

任何见解都将受到赞赏。

4 个答案:

答案 0 :(得分:2)

这一行:

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

创建一个包含五个元素的列表(每个元素都是TrueFalse) 例如,如果x'e',则会创建列表

[False, True, False, False, False]

如果x不是元音,则会创建列表

[False, False, False, False, False]

任何非空列表都为true,因此满足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":

答案 1 :(得分: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")))

答案 2 :(得分:0)

一个班轮炫耀:

string = input("#: ")
print(''.join(filter(lambda x: x.lower() in 'aeiou', string)))

参考

[1] https://docs.python.org/2/library/functions.html#filter

[2] http://www.diveintopython.net/power_of_introspection/lambda_functions.html

答案 3 :(得分: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