0Pricing
Coding Interview Prep · レッスン

値だけでなくインデックスを見つける

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. CP のためのリスト、インデックス、スライス
  2. 内包表記で配列を高速に作る
  3. Min、Max、Sum、累積合計
  4. 値だけでなくインデックスを見つける
← Coding Interview Prepに戻る