値だけでなくインデックスを見つける
enumerate で位置を追跡します
「値だけでなくインデックスを見つける」はCoddyKit上の無料Coding Interview Prepレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCoding Interview Prep学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Coding Interview Prepコースには全4レッスンが含まれています。
位置が重要になる場面
答えは値ではなく、その値がどこにあるかであることがよくあります。競技プログラミングでは1始まりまたは0始まりのインデックスを求める問題が頻出するため、位置を追跡してください。
a = [4, 1, 7, 3].index()で検索する
a.index(x)は最初に一致した要素の位置を返します。簡潔に書けますが、左から右へO(n)で走査します。
pos = a.index(7) # 2値がないとエラーになる
値が存在しない場合、.index()はValueErrorを発生させ、実行時エラーになります。不確かな場合は、先に所属を確認してください。
if x in a:
pos = a.index(x)enumerateでループする
enumerateを使うと、各ステップでインデックスと値を同時に取得できます。走査しながら位置を追跡する、すっきりした方法です。
for i, v in enumerate(a):
print(i, v)enumerateを1から始める
多くのジャッジでは1始まりの位置が求められます。enumerateにstart=1を渡すと最初のインデックスが1になり、問題文と一致します。
for i, v in enumerate(a, start=1):
...最大値のインデックス
最大値がどこにあるかを求めるには、走査しながら最良のインデックスを記録します。max(a)だけでは値しか得られません。
best = 0
for i, v in enumerate(a):
if v > a[best]:
best = i洗練されたargmax
簡潔なテクニックとして、各インデックスと値を組にし、値を基準に最大値を取る方法があります。rangeから位置を直接取得できます。
best = max(range(len(a)), key=lambda i: a[i])一致するすべてのインデックスを集める
ある値が現れるすべての位置が必要ですか?enumerateに対する内包表記を使えば、1行ですべての一致を集められます。
idx = [i for i, v in enumerate(a) if v == 7]値をインデックスに対応付ける
同じ検索を繰り返す場合は、値からインデックスへのdictを一度作成します。その後の検索をすべてO(1)で実行できます。
where = {v: i for i, v in enumerate(a)}重複には注意が必要
値からインデックスへのdictは最後の出現位置だけを保持します。重複が重要な場合は、キーごとにリストを使うか、enumerateを使ってください。
where = {}
for i, v in enumerate(a):
where.setdefault(v, []).append(i)インデックスの基準を変換する
基準に注意してください。0始まりで保存した値を1始まりで出力する必要がある場合は、1を加えます。基準の混在は、気づきにくい誤答の原因になります。
print(pos + 1) # 0-based to 1-basedクイックチェック
ループ中に1始まりの位置が必要です。何と書けばよいでしょうか?
まとめ:位置を追跡する
これで、単一のインデックス、最大値のインデックス、すべての一致するインデックスを求め、値を安全に位置へ対応付けられるようになりました。enumerateは信頼できる位置の追跡手段です。🎯
よくある質問
「値だけでなくインデックスを見つける」レッスンは無料ですか?
はい。「値だけでなくインデックスを見つける」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Coding Interview Prepコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Coding Interview Prepコースには全4レッスンが含まれています。
「値だけでなくインデックスを見つける」で何を学びますか?
enumerate で位置を追跡します ブラウザで直接実行するハンズオンコードでCoding Interview Prepを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Coding Interview Prepを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCoding Interview Prepは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「値だけでなくインデックスを見つける」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCoding Interview Prepレッスンでコードを書いて実行できますか?
はい。すべてのCoding Interview Prepレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- CP のためのリスト、インデックス、スライス
- 内包表記で配列を高速に作る
- Min、Max、Sum、累積合計
- 値だけでなくインデックスを見つける