我目前正在处理一个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))
任何见解都将受到赞赏。
答案 0 :(得分: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]
任何非空列表都为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