查找所有元音的单词数

时间:2013-02-25 17:33:52

标签: python python-2.7

我收到一个文本文件,该文件存储在名为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 所有的元音。

3 个答案:

答案 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?