これは、さまざまな言語の新人プログラマーからの多くの質問で見られる、論理エラーを含む一般的な質問と回答です。
問題は、配列内で特定の入力条件に一致する要素を検索することです。アルゴリズムの擬似コードは次のとおりです:
このコードでは、一致する要素が正常に見つかった場合でも、「見つかりません」と報告されます。
問題は、配列内で何かを線形に検索する場合、配列の最後に到達するまで、それが見つからなかったことに気づかないことです。質問内のコードは、他に一致する要素がある場合でも、一致しない要素ごとに「見つかりません」と報告します。
簡単な変更は、変数を使用して何かが見つかったかどうかを追跡し、ループの最後でその変数をチェックすることです。
Python の for ループには else: ブロックがあります。コードは、break を使用してループが終了したときではなく、ループの実行が終了したときにのみ実行されます。これにより、found 変数を回避できます (ただし、後の処理では役立つ可能性があります):
for
else:
break
found
一部の言語には、独自のループを作成する代わりに使用できる組み込みメカニズムがあります。
any
some
find
index
頻繁に検索を行う場合は、配列をより効率的に検索できるデータ構造に変換することをお勧めします。ほとんどの言語は、sets および/または hashtables データ構造を提供します (後者には、連想配列、マップ、辞書など、言語に応じて多くの名前があります)。通常、これらがその構造です。検索が行われる場所は O(1) ですが、配列をスキャンする時間は O(n) です。
sets
hashtables
問題は、配列内で何かを線形に検索する場合、配列の最後に到達するまで、それが見つからなかったことに気づかないことです。質問内のコードは、他に一致する要素がある場合でも、一致しない要素ごとに「見つかりません」と報告します。
簡単な変更は、変数を使用して何かが見つかったかどうかを追跡し、ループの最後でその変数をチェックすることです。
リーリーPython の
リーリーfor
ループにはelse:
ブロックがあります。コードは、break
を使用してループが終了したときではなく、ループの実行が終了したときにのみ実行されます。これにより、found
変数を回避できます (ただし、後の処理では役立つ可能性があります):一部の言語には、独自のループを作成する代わりに使用できる組み込みメカニズムがあります。
any
またはsome
関数があります。find
またはindex
関数が提供されています。頻繁に検索を行う場合は、配列をより効率的に検索できるデータ構造に変換することをお勧めします。ほとんどの言語は、
sets
および/またはhashtables
データ構造を提供します (後者には、連想配列、マップ、辞書など、言語に応じて多くの名前があります)。通常、これらがその構造です。検索が行われる場所は O(1) ですが、配列をスキャンする時間は O(n) です。