input() vastaan sys.stdin
Miksi tavallinen input() hidastaa suurissa testeissä
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.stdinLukekaa 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.readlineMilloin 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. ⚡
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
- input() vastaan sys.stdin
- Monen luvun jäsentäminen yhdeltä riviltä
- Tulosteen puskurointi oikeaoppisesti
- N rivin lukeminen ja reunatapaukset