特定の文字列「hello」のリストがあるかどうかを確認するにはどうすればよいですか。
x = ['hello', 'hello', 'hello']
# evaluates to True
x = ['hello', '1']
# evaluates to False
特定の文字列「hello」のリストがあるかどうかを確認するにはどうすればよいですか。
x = ['hello', 'hello', 'hello']
# evaluates to True
x = ['hello', '1']
# evaluates to False
all()
関数を使用して、条件がTrue
すべての要素に当てはまるかどうかをテストします。
all(el == 'hello' for el in x)
このall()
関数は iterable (結果を 1 つずつ生成するもの) を取り、True
それらの要素がすべて true の場合にのみ、それ自体を返します。間違っているものを見つけた瞬間に戻ってきて、それFalse
以上は調べません。
ここで iterable はジェネレータ式で、入力シーケンスの各要素に対して等価性テストを実行します。false 値が検出された場合に早期に反復を停止するという事実all()
により、含まれるジェネレーター式のテストが早い段階でいずれかの要素に対して False である場合、このテストは非常に効率的になります。
x
ifがemptyの場合、空のシーケンスで false である要素が見つからないだけでなく、返されることにall()
注意してください。最初にシーケンスが空でないことをテストできます。True
if x and all(el == 'hello' for el in x):
それを回避するために。
これはうまくいくはずです:
# First check to make sure 'x' isn't empty, then use the 'all' built-in
if x and all(y=='hello' for y in x):
all
ビルトインの良いところは、条件を満たさない最初の項目が見つかったときに停止することです。これは、大きなリストで非常に効率的であることを意味します。
また、リスト内のすべての項目が文字列の場合lower
、文字列のメソッドを使用して、「HellO」、「hELLO」などと一致させることができます。
if x and all(y.lower()=='hello' for y in x):
あなたが望むことを行うさらに別の方法(all
他のすべての回答が指摘しているように、それを行うための最も慣用的な方法です)、複数回チェックする必要がある場合に役立ちます:
s = set(l)
cond = (len(s) == 1) and (item in s)
O(n)
条件を確認するたびにトラバーサルを回避するのに役立ちます。