0Pricing
Competitive Programming Academy · Lekcja

input() kontra sys.stdin

Dlaczego zwykłe input() spowalnia program na dużych testach

input() kontra sys.stdin to bezpłatna lekcja Competitive Programming Academy na CoddyKit. To lekcja 1 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.

Ukryty koszt input()

Każde wywołanie input() wykonuje dodatkową pracę w tle. Przy kilku wierszach nie ma to znaczenia, ale podczas konkursów może pojawić się ich tysiące. ⏱️

Dlaczego to się sumuje

Spowolnienie wynika z narzutu na każde wywołanie: monity, opróżnianie buforów i sprawdzanie kodowania powtarzają się przy odczycie każdej linii.

Poznaj sys.stdin

Szybszą metodą jest odczyt z sys.stdin, czyli surowego strumienia danych wejściowych. Pomija on dodatkowe udogodnienia, które input() wykonuje za nas.

import sys
data = sys.stdin

Szybko odczytaj jedną linię

Do szybkiego pobrania pojedynczej linii należy użyć sys.stdin.readline(). Działa podobnie jak input(), ale narzut na każde wywołanie jest znacznie mniejszy.

import sys
line = sys.stdin.readline()

Pamiętaj o znaku nowej linii

readline() zachowuje końcowy znak nowej linii. Przed analizą wartości należy wywołać .strip(), aby go usunąć.

n = int(sys.stdin.readline().strip())

Odczytaj wszystko naraz

Aby uzyskać najszybszy odczyt, należy pobrać całe dane wejściowe za jednym razem za pomocą sys.stdin.read(), a następnie samodzielnie przetworzyć tekst.

data = sys.stdin.read()

Podziel cały tekst

Po wywołaniu read() należy użyć .split(), aby zamienić wszystkie tokeny w jedną płaską listę. Spacje i znaki nowej linii zostaną obsłużone razem.

tokens = sys.stdin.read().split()

Przypisz input ponownie dla szybkości

Popularny trik polega na wskazaniu przez input funkcji readline, dzięki czemu stary kod pozostaje bez zmian, ale działa szybciej.

import sys
input = sys.stdin.readline

Kiedy input() w zupełności wystarcza

Jeśli zadanie wymaga odczytu tylko kilku wierszy, zwykłe input() w zupełności wystarczy. Szybszą metodę warto zachować dla dużych danych wejściowych.

Print również ma narzut

Ta sama zasada dotyczy danych wyjściowych: wiele wywołań print() działa wolno. Zajmiemy się tym w późniejszej lekcji o grupowaniu wyników.

Wybierz właściwe narzędzie

Ogólna zasada jest taka: małe dane wejściowe — input(); duże dane wejściowe — sys.stdin. Dopasowanie narzędzia do N pomaga uniknąć utraty punktów.

Szybkie sprawdzenie

Szybkie sprawdzenie intuicji dotyczącej szybkości odczytu.

Podsumowanie: szybki odczyt

Poznaliśmy sys.stdin jako szybszą alternatywę dla input(): readline() do odczytu pojedynczych wierszy lub read().split() do pobrania wszystkiego. Narzędzie należy dopasować do rozmiaru danych wejściowych. ⚡

Często zadawane pytania

Czy lekcja „input() kontra sys.stdin” jest bezpłatna?

Tak — pełny tekst „input() kontra sys.stdin” 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 „input() kontra sys.stdin”?

Dlaczego zwykłe input() spowalnia program na dużych testach Ć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 1 z 4.

Ile czasu zajmuje lekcja „input() kontra sys.stdin”?

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. input() kontra sys.stdin
  2. Parsowanie wielu liczb w jednym wierszu
  3. Właściwy sposób buforowania wyjścia
  4. Odczyt N wierszy i przypadki brzegowe
← Powrót do Competitive Programming Academy