Competitive Programming Academy · Lekcja

Znajdowanie indeksu, nie tylko wartości

Śledzenie pozycji za pomocą enumerate

Lekcja 4 z 413 kroki

Znajdowanie indeksu, nie tylko wartości to bezpłatna lekcja Competitive Programming Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Competitive Programming Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Competitive Programming Academy zawiera 4 lekcji w sumie.

Pozycje mają znaczenie

Często odpowiedzią nie jest wartość, lecz informacja, gdzie się ona znajduje. Zadania konkursowe często wymagają indeksu 1-based lub 0-based, dlatego należy śledzić pozycje.

a = [4, 1, 7, 3]

Znajdź za pomocą .index()

a.index(x) zwraca pozycję pierwszego dopasowania. Jest szybkie do zapisania, ale przeszukuje elementy od lewej do prawej w czasie O(n).

pos = a.index(7)  # 2

Brakujące wartości powodują błędy

Jeśli wartości nie ma, .index() zgłasza ValueError, czyli powoduje błąd w czasie działania. Gdy nie ma pewności, należy najpierw sprawdzić przynależność elementu.

if x in a:
    pos = a.index(x)

Iteruj za pomocą enumerate

enumerate przekazuje w każdym kroku jednocześnie indeks i wartość — to przejrzysty sposób śledzenia pozycji podczas skanowania.

for i, v in enumerate(a):
    print(i, v)

Rozpocznij enumerate od jedynki

Wiele systemów sprawdzających wymaga pozycji 1-based. Przekaż start=1 do enumerate, aby pierwszy indeks wynosił 1, zgodnie z treścią zadania.

for i, v in enumerate(a, start=1):
    ...

Indeks maksimum

Aby znaleźć położenie maksimum, należy skanować tablicę i zapamiętywać najlepszy indeks, ponieważ samo max(a) zwraca tylko wartość.

best = 0
for i, v in enumerate(a):
    if v > a[best]:
        best = i

Sprytne argmax

Zwięzła sztuczka: połącz każdy indeks z jego wartością i wybierz maksimum według wartości. range bezpośrednio podaje pozycję.

best = max(range(len(a)), key=lambda i: a[i])

Zbierz wszystkie pasujące indeksy

Potrzebują Państwo każdej pozycji danej wartości? Wyrażenie listowe oparte na enumerate zbiera wszystkie dopasowania w jednym wierszu.

idx = [i for i, v in enumerate(a) if v == 7]

Mapuj wartość na indeks

W przypadku powtarzających się wyszukiwań należy raz zbudować dict mapujący wartości na indeksy, zamieniając każde kolejne wyszukiwanie w operację O(1).

where = {v: i for i, v in enumerate(a)}

Duplikaty wymagają uwagi

A dict zachowuje tylko ostatnie wystąpienie danej wartości. Gdy duplikaty mają znaczenie, należy użyć listy dla każdego klucza albo enumerate.

where = {}
for i, v in enumerate(a):
    where.setdefault(v, []).append(i)

Konwertuj między bazami indeksów

Należy pamiętać o bazie: jeśli zapisano indeks 0-based, a trzeba wypisać indeks 1-based, należy dodać jeden. Mieszanie baz to pułapka prowadząca do cichej błędnej odpowiedzi.

print(pos + 1)  # 0-based to 1-based

Szybkie sprawdzenie

Chcą Państwo uzyskać pozycje 1-based podczas iterowania. Co należy napisać?

Podsumowanie: śledzenie pozycji

Można teraz znajdować pojedyncze indeksy, indeks maksimum i wszystkie indeksy, a także bezpiecznie mapować wartości na pozycje. enumerate to niezawodne narzędzie śledzenia pozycji. 🎯

Bezpłatny start

Ucz się Python dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
30
Lekcje
120

Często zadawane pytania

Czy lekcja „Znajdowanie indeksu, nie tylko wartości” jest bezpłatna?

Tak — pełny tekst „Znajdowanie indeksu, nie tylko wartości” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Competitive Programming Academy, przejdź na CoddyKit PRO. Kurs Competitive Programming Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Znajdowanie indeksu, nie tylko wartości”?

Śledzenie pozycji za pomocą enumerate Ćwiczysz Competitive Programming Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Competitive Programming Academy?

Nie wymagamy żadnego doświadczenia. Competitive Programming Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Znajdowanie indeksu, nie tylko wartości”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Competitive Programming Academy?

Tak. Każda lekcja Competitive Programming Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Listy, indeksowanie i wycinanie dla CP
  2. Szybkie tworzenie tablic za pomocą comprehension
  3. Min, max, suma i sumy narastające
  4. Znajdowanie indeksu, nie tylko wartości
← Powrót do Competitive Programming Academy