我收到一个文本文件,该文件存储在名为words_list
:
if __name__ = "__main__":
words_file = open('words.txt')
words_list = []
for w in words_file:
w = w.strip().strip('\n')
words_list.append(w)
这就是字符串列表的样子(这是一个非常非常长的单词列表)
我必须找到所有元音的“所有单词”;到目前为止我有:
def all_vowel(words_list):
count = 0
for w in words_list:
if all_five_vowels(w): # this function just returns true
count = count + 1
if count == 0
print '<None found>'
else
print count
这个问题是count
每次看到元音时都会加1,而如果整个单词,我希望它只添加1 所有的元音。
答案 0 :(得分:5)
只需测试您的任何单词是否为元音集的子集:
vowels = set('aeiou')
with open('words.txt') as words_file:
for word in words_file:
word = word.strip()
if vowels.issubset(word):
print word
set.issubset()
适用于任何序列(包括字符串):
>>> set('aeiou').issubset('word')
False
>>> set('aeiou').issubset('education')
True
答案 1 :(得分:3)
假设word_list变量是一个实际的列表,可能你的“all_five_vowels”函数是错误的。
这可能是另一种实现方式:
def all_five_vowels(word):
vowels = ['a','e','o','i','u']
for letter in word:
if letter in vowels:
vowels.remove(letter)
if len(vowels) == 0:
return True
return False
答案 2 :(得分:0)
@Martijn Peters已经发布了一个可能是Python中最快的解决方案。为了完整起见,这是在Python中解决此问题的另一种好方法:
vowels = set('aeiou')
with open('words.txt') as words_file:
for word in words_file:
word = word.strip()
if all(ch in vowels for ch in word):
print word
这使用带有生成器表达式的内置函数all()
,这是一个值得学习的方便模式。如下所示,如果单词中的所有字符都是元音,则打印单词。&#34; Python也有any()
,可用于检查&#34;如果单词中的任何字符是元音,则打印单词&#34;。
此处有关any()
和all()
的更多讨论:"exists" keyword in Python?