vowels = {“a”, “e”, “i”, “o”, “u”, “A”, “E”, “I”, “O”, “U”}
if any(char in vowels for char in word):
…
注意: 这样比较好,因为它会在单词中找到元音后立即短路。因此,除非字符串中没有元音,否则不必检查所有字符。
编辑:运行
了一个
timeit测试,发现@falsetru的答案非常快,但是经过很少的优化,该
re版本胜过其他所有功能。
使用set.isdisjoint(此方法找到匹配项后立即返回):
>>> vowels = set('aeiou') # set('aeiouAEIOU') if you want case-insensitivty>>> not vowels.isdisjoint('bcd')False>>> not vowels.isdisjoint('hello')Trueimport revowels = {"a", "e", "i", "o", "u", "A", "E", "I", "O", "U"}pattern = re.compile("[AEIOUaeiou]")def intersection(): return bool(vowels.intersection("TWYNDYLLYNGS"))def any_version(): return any(char in vowels for char in "TWYNDYLLYNGS")def re_version(): return bool(pattern.search("TWYNDYLLYNGS"))def disjoint(): return vowels.isdisjoint("TWYNDYLLYNGS")from timeit import timeitprint timeit("intersection()", "from __main__ import intersection, vowels")print timeit("any_version()", "from __main__ import any_version, vowels")print timeit("re_version()", "from __main__ import re_version, vowels")print timeit("disjoint()", "from __main__ import disjoint, vowels")


