0Pricing
Coding Interview Prep · レッスン

input() と sys.stdin の対決

大きなテストで通常の input() が不利になる理由を学びます

「input() と sys.stdin の対決」はCoddyKit上の無料Coding Interview Prepレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCoding Interview Prep学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Coding Interview Prepコースには全4レッスンが含まれています。

input()に潜むコスト

input()を呼び出すたびに、内部で追加の処理が行われます。数行なら問題ありませんが、コンテストでは何千行もの入力が与えられることがあります。⏱️

積み重なる理由

遅くなる原因は呼び出しごとのオーバーヘッドです。プロンプト、フラッシュ、エンコーディングの確認が、1行読むたびに繰り返されます。

sys.stdinを知る

より高速な方法は、生の入力ストリームであるsys.stdinから読み取ることです。input()が追加する親切な処理を省略できます。

import sys
data = sys.stdin

1行を高速に読む

sys.stdin.readline()を使うと、1行をすばやく取得できます。input()と同じように動作しますが、呼び出しごとのオーバーヘッドがはるかに小さくなります。

import sys
line = sys.stdin.readline()

改行に注意する

readline()は末尾の改行文字を残します。値を解析する前に、.strip()を呼び出して削除しましょう。

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

すべてを一度に読み込む

最速で読み取るには、sys.stdin.read()で入力全体を一度に取得し、その後で自分でテキストを処理します。

data = sys.stdin.read()

全体を分割する

read()の後に.split()を呼び出すと、すべてのトークンを1つの平坦なリストにできます。空白と改行をまとめて処理できます。

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

速度のためにinputを再束縛する

よく使われる方法は、inputをreadlineに割り当てることです。既存のコードをほぼ変えずに高速化できます。

import sys
input = sys.stdin.readline

input()で十分な場合

数行しか読まない問題なら、通常のinput()でまったく問題ありません。大量入力のときだけ高速な方法を使いましょう。

printにもオーバーヘッドがある

出力も同じです。print()を何千回も呼び出すと遅くなります。後のバッチ処理のレッスンで解決方法を学びます。

適切な方法を選ぶ

目安は、入力が少なければinput()、多ければsys.stdinです。Nの大きさに合った方法を選ぶことで、時間制限に間に合わせやすくなります。

確認問題

入力速度について、直感的に確認してみましょう。

まとめ:高速な入力

sys.stdinをinput()の高速な代替手段として学びました。1行ずつならreadline()、すべて読むならread().split()を使います。入力サイズに合った方法を選びましょう。⚡

よくある質問

「input() と sys.stdin の対決」レッスンは無料ですか?

はい。「input() と sys.stdin の対決」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Coding Interview Prepコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Coding Interview Prepコースには全4レッスンが含まれています。

「input() と sys.stdin の対決」で何を学びますか?

大きなテストで通常の input() が不利になる理由を学びます ブラウザで直接実行するハンズオンコードでCoding Interview Prepを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Coding Interview Prepを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCoding Interview Prepは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「input() と sys.stdin の対決」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCoding Interview Prepレッスンでコードを書いて実行できますか?

はい。すべてのCoding Interview Prepレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

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

  1. input() と sys.stdin の対決
  2. 1 行に並んだ複数の数値を解析する
  3. 正しい方法でまとめて出力する
  4. N 行の読み込みとエッジケース
← Coding Interview Prepに戻る