Competitive Programming Academy · Oppitunti

input() vastaan sys.stdin

Miksi tavallinen input() hidastaa suurissa testeissä

Oppitunti 1/413 vaihetta

input() vastaan sys.stdin on ilmainen Competitive Programming Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Competitive Programming Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Competitive Programming Academy-kurssilla on yhteensä 4 oppituntia.

input():n piilokustannus

Jokainen input()-kutsu tekee taustalla ylimääräistä työtä. Muutamalla rivillä sillä ei ole väliä, mutta kilpailuissa syötteenä voi olla tuhansia rivejä. ⏱️

Miksi vaikutus kasvaa

Hidastumisen aiheuttaa kutsukohtainen yleiskustannus: kehotteet, puskurointi ja koodauksen tarkistukset toistuvat jokaisella luettavalla rivillä.

Tutustukaa sys.stdiniin

Nopeampi tapa on lukea sys.stdin-syötevirrasta eli raakasyötevirrasta. Se ohittaa käyttäjäystävälliset lisätoiminnot, joita input() tekee puolestanne.

import sys
data = sys.stdin

Lukekaa yksi rivi nopeasti

Käyttäkää sys.stdin.readline()-kutsua yhden rivin nopeaan lukemiseen. Se toimii kuten input(), mutta kutsukohtainen yleiskustannus on paljon pienempi.

import sys
line = sys.stdin.readline()

Huomioikaa rivinvaihto

readline() säilyttää lopussa olevan rivinvaihto-merkin. Poistakaa se kutsumalla .strip() ennen arvon käsittelyä.

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

Lukekaa kaikki kerralla

Kun haluatte lukea mahdollisimman nopeasti, noutakaa koko syöte yhdellä kertaa käyttämällä sys.stdin.read()-kutsua ja käsitelkää teksti sen jälkeen itse.

data = sys.stdin.read()

Jakakaa koko syöte osiin

Kutsukaa read()-kutsun jälkeen .split()-metodia, joka muuttaa kaikki tokenit yhdeksi litteäksi listaksi. Välilyönnit ja rivinvaihdot käsitellään yhdessä.

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

Sito input uudelleen nopeuden vuoksi

Yleinen niksi on osoittaa input readlineen, jolloin vanha koodinne pysyy ennallaan mutta suoritetaan nopeammin.

import sys
input = sys.stdin.readline

Milloin input() riittää

Jos tehtävässä luetaan vain muutama rivi, tavallinen input() riittää mainiosti. Säästäkää nopeampi tapa suurille syötteille.

Myös print-kutsuilla on yleiskustannus

Sama ajatus koskee tulostamista: monet print()-kutsut ovat hitaita. Korjaamme tämän myöhemmässä erässä käsittelevässä oppitunnissa.

Valitkaa oikea työkalu

Nyrkkisääntö on seuraava: pieni syöte, käyttäkää input()-kutsua; suuri syöte, vaihtakaa sys.stdin-käyttöön. Työkalun sovittaminen N:ään säästää pisteitänne.

Pikatarkistus

Nopea tuntumakoe syötteen lukunopeudesta.

Kertaus: nopea lukeminen

Tutustuitte sys.stdin-objektiin input():n nopeana vaihtoehtona: readline() rivikohtaisesti tai read().split() koko syötteelle. Sovittakaa työkalu syötteen kokoon. ⚡

Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
30
Oppitunnit
120

Usein kysytyt kysymykset

Onko oppitunti ”input() vastaan sys.stdin” ilmainen?

Kyllä – oppitunnin ”input() vastaan sys.stdin” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Competitive Programming Academy-kurssin, päivitä CoddyKit PROhon. Competitive Programming Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”input() vastaan sys.stdin”?

Miksi tavallinen input() hidastaa suurissa testeissä Harjoittelet Competitive Programming Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Competitive Programming Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Competitive Programming Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”input() vastaan sys.stdin”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Competitive Programming Academy-oppitunnilla?

Kyllä. Jokainen Competitive Programming Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. input() vastaan sys.stdin
  2. Monen luvun jäsentäminen yhdeltä riviltä
  3. Tulosteen puskurointi oikeaoppisesti
  4. N rivin lukeminen ja reunatapaukset
← Takaisin: Competitive Programming Academy