1. ホーム
  2. python

[解決済み] 文字列中の母音の有無を確認する

2022-02-17 08:25:16

質問

ある単語の中に母音があるかどうかを調べたい。もしあれば、その単語に対して次のような操作を行う必要がある。 op(word) . せっかく考えたのだから、forループは避けたい。

for char in word:
    if char in 'aeiou':
#confused here... 

実行時間に関して、コストの低い方法を推奨してください。また、上記の方法の修正も手伝ってください。

どのように解決するのですか?

vowels = {"a", "e", "i", "o", "u", "A", "E", "I", "O", "U"}
if any(char in vowels for char in word):
   ...

これは、単語の中に母音を見つけるとすぐに、短絡するため、より優れています。つまり、文字列の中に母音がない限り、すべての文字をチェックする必要がないのです。

編集する を走らせる。 timeit テスト ということを発見しました。 ファルセットゥの回答 は非常に高速ですが、最適化がほとんどされていないため re の方が優れています。

import re

vowels = {"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 timeit

print 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")