0

我得到了一个文本文件,它存储在一个名为的列表中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。

4

3 回答 3

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
于 2013-02-25T17:53:07.523 回答
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
于 2013-02-25T17:46:13.917 回答
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(),这是一个方便学习的模式。这读作“如果单词中的所有字符都是元音,则打印该单词。” Python 还具有any()可用于检查“如果单词中的任何字符是元音,则打印该单词”之类的检查。

更多关于这里的讨论: Pythonany()中的“exists”关键字?all()

于 2013-04-08T21:20:07.203 回答