こんにちは。ナミレリです。今回の記事はPythonのinput関数で様々な複数行の受け取り方を紹介します。
Pythonでもそうでなくても、データの受け取り方のコードはその効率性や可読性を大きく左右します。特に、競技プログラミングやデータ分析、シミュレーションなど、多量のデータを扱うシチュエーションでは、入力の取り扱いは非常に重要です。
ですが、私もそうですが、Pythonの初心者にとって、データの受け取り方は少し呪文のように感じると思います。input()、 map()
、 リスト内包表記など、まさに覚えにくく苦手意識があるのではないでしょうか。これらの関数や構文をどのように組み合わせて使用するのか、どのようなシチュエーションでどれを選択すべきなのか、の参考にしていただければ幸いです。
この記事はこんな人にオススメ
- Python初心者:基本的な入力処理の方法から学びたい方
- 競技プログラミングに興味があり、効率的な入力処理でパフォーマンスを向上させたい方
- 学生:プログラミングの授業や研究でPythonを使用している方
- シミュレーションや解析ツールの開発者:複雑なデータ構造の入力をスムーズに処理したい方
- 常に学び続けたいと思っているプログラマー:Pythonの入力処理に関する新しいテクニックやノウハウを学びたい方。
- M2 MacBook Air 13.6 インチ
- M1 Max MacBook Pro 14インチ
- macOS Sonoma 14.0
- Python 3.10.12
- miniforge3-22.11.1-4
目次
input関数で1行の様々な値を受け取る方法
まずはもっとも基本的な1行の文字を受け取るinput()関数の使い方です。
input()
関数はユーザーからの標準入力を待ちます。その後にユーザーが何らかの文字列を入力してエンターキーを押すと、input() 関数は入力された文字列を返しますが、文字列の最後のエンターキーにより追加された改行文字(\n)は含みません。
では、早速input()関数で数値や文字列を受け取る様々な方法を見ていきましょう。
1行の文字を受け取る
単一の行の入力を受け取る場合には、以下のコードが最も基本的なものになります。
# 例
# 入力値
xyz
input_line = input()
# xyzと入力する
print(input_line)
# xyzと出力される
print(type(input_line))
# <class 'str'>と出力される
# 例
# 入力値
123
input_line = input()
# 123と入力する
print(input_line)
# 123と出力される
print(type(input_line))
# <class 'str'>と出力される
1行の整数を受け取る
次に、単一の行の入力が整数であることを想定して受け取る場合には、以下のコードが最も基本的なものになります。
# 例
# 入力値
123
input_line = int(input())
# 123と入力する
print(input_line)
# 123と出力される
print(type(input_line))
# <class 'int'>と出力される
# 例
# 入力値
-123
input_line =input()
# -123と入力する
print(input_line)
# -123と出力される
print(type(input_line))
# <class 'int'>と出力される
input_line = int(input())
# 1.23と入力する
print(input_line)
# ValueError: invalid literal for int() with base 10: '1.23'
input_line = int(input())
# xyzと入力する
print(input_line)
# ValueError: invalid literal for int() with base 10: 'xyz'
1行の小数(浮動小数点型)を受け取る
単一の行の入力が少数(浮動小数点型)であることを想定して受け取る場合には、以下のコードが最も基本的なものになります。
# 例
# 入力値
1.234
input_line = float(input())
# 1.234と入力する
print(input_line)
# 1.234と出力される
print(type(input_line))
# <class 'float'>と出力される
# 例
# 入力値
10
input_line = float(input())
# 10と入力する
print(input_line)
# 10.0と出力される
print(type(input_line))
# <class 'float'>と出力される
1行の空白区切りの文字を受け取る
単一の行の入力が空白で区切られた文字列であることを想定して受け取る場合には、以下のコードが最も基本的なものになります。
.split()メソッドは、デフォルトで空白(スペースやタブなど)を区切り文字として使用して、文字列のリストに分割します。
# 例
# 入力値
10 20 30
input_line = input().split()
# 10 20 30と入力する
print(input_line)
#['10', '20', '30']と出力される
print(input_line[0])
# 10と出力される
print(type(input_line))
# <class 'list'>と出力される
print(type(input_line[0]))
# <class 'str'>と出力される
3つの文字列が入力されることがわかっている場合は、下のコードのように3つの要素をそれぞれ変数 n,m,kに代入することもできます。
n, m, k = input().split()
print(n, m, k)
# 10 20 30と出力される
print(type(n))
# <class 'str'>と出力される
1行の空白区切りの整数を受け取る
単一の行の入力が空白で区切られた整数であることを想定して受け取る場合には、以下のコードです。
# 例
# 入力値
10 20 30
input_line = list(map(int, input().split()))
# 10 20 30と入力する
print(input_line)
#['10', '20', '30']と出力される
print(input_line[0])
# 10と出力される
print(type(input_line))
# <class 'list'>と出力される
print(type(input_line[0]))
# <class 'int'>と出力される
先程と同じように、3つの整数が入力されることがわかっている場合は、下のコードのように3つの要素をそれぞれ変数 n,m,kに代入することもできます。
n, m, k = map(int, input().split())
print(n, m, k)
# 10 20 30と出力される
print(type(n))
# <class 'int'>と出力される
初めて見る方にはこれは呪文のよう感じると思います。覚えようとしてもすぐ忘れてしまうコードでもありますね。ひとつひとつ解説します。
input().split()
# input().split()で入力された文字を空白で分割しています。
map(int, list)
# map(int, list)でmap関数を使ってlistの要素をintで整数に変換しています。
# input().split()でlistに分割されたものが対象となります。
list()
# 最後にmap関数の結果をlist関数で明示的にリストに変換しています。
1行の空白区切りの小数(浮動小数点型)を受け取る
単一の行の入力が空白で区切られた浮動小数点であることを想定して受け取る場合には、以下のコードです。
# 例
# 入力値
1.5 2.5 3.5
input_line = list(map(float, input().split()))
# 1.5 2.5 3.5と入力する
print(input_line)
#['1.5', '2.5', '3.5']と出力される
print(input_line[0])
# 1.5と出力される
print(type(input_line))
# <class 'list'>と出力される
print(type(input_line[0]))
# <class 'float'>と出力される
input関数で複数行の様々な値を受け取る方法
複数行からなる値を読み取る(文字列)
複数の行の入力を受け取る場合には、以下のコードが最も基本的なものになります。下の例では、受け取る行は2行であることがわかっています。
# 例
# 入力値
ABCDE
abc
A, B = [input() for _ in range(2)]
print(A)
# ABCDEと出力される
print(B)
# abcと出力される
複数行からなる値を読み取る(整数)
複数の行の入力を受け取る場合には、以下のコードが最も基本的なものになります。下の例では、受け取る行は2行であることがわかっていて、整数です。
# 例
# 入力値
123
9876
A, B = [int(input()) for _ in range(2)]
print(A)
# 123と出力される
print(B)
# 9876と出力される
複数行からなる値を読み取る(最初の行に受け取る行数指定あり)
次に、最初の行の値にその後に入力される行数を受け取る場合のケースです。受け取る値は全て整数を想定します。受け取るにはリスト内包表記を使用します。
リスト内包表記は、Pythonの非常に強力な機能の一つでわかりやすいコードで効率的なリスト操作ができます。
# 例
# 入力値
# 最初の行の値はその後に入力される行数を示す
2
2
3
n = int(input())
li = [int(input()) for _ in range(n)]
print(li)
# [2, 3]と出力される
print(type(li))
# <class 'list'>と出力される
print(type(li[0]))
# <class 'int'>と出力される
Pythonでのリストを作る時にコンパクトかつ読みやすい形で行うことのできる構文です。基本的な形式は以下のようになります。
[expression for item in iterable]
- expression:各要素に適用する式
- item:現在の要素を参照する変数
- iterable:反復可能なオブジェクト(例:リスト、タプル、辞書のキー、文字列など)
import sys
input = sys.stdin.readline
n = int(input())
li = [int(input()) for _ in range(n)]
print(li)
# [2, 3]と出力される
print(type(li))
# <class 'list'>と出力される
print(type(li[0]))
# <class 'int'>と出力される
複数行からなる空白区切りの値を受け取る(最初の行に受け取る行数指定あり)
次に、最初の行の値にその後に入力される行数を受け取る場合のケースです。受け取る値は全て整数を想定します。受け取るにはリスト内包表記を使用します。
リスト内包表記は、Pythonの非常に強力な機能の一つでわかりやすいコードで効率的なリスト操作ができます。
# 例
# 入力値
# 最初の行の値はその後に入力される行数を示す
4
a b
c d
e f
g h
n = int(input())
li = [input().split() for _ in range(n)]
print(li)
# [['a', 'b'], ['c', 'd'], ['e', 'f'], ['g', 'h']]と出力される
print(type(li))
# <class 'list'>と出力される
print(type(li[0][0]))
# <class 'str'>と出力される
複数行からなる空白区切りの整数を受け取る(Part1)
次に、最初の行の値にその後に入力される行数を受け取りますが、受け取る値は空白区切りの整数の場合です。こちらもリスト内包表記を使用てコンパクトに書きます。
# 例
# 入力値
# 最初の行の値はその後に入力される行数を示す
3
20 30
40 50
60 70
n = int(input())
li = [list(map(int, input().split())) for _ in range(n)]
print(li)
# [[20, 30],[40, 50],[60, 70]]と出力される
print(type(li))
# <class 'list'>と出力される
print(type(li[0][0]))
# <class 'int'>と出力される
下はsys.stdin.readlineを使う場合の例です。処理速度はsys.stdin.readlineが速いです。
import sys
input = sys.stdin.readline
n = int(input())
li = [list(map(int, input().split())) for _ in range(n)]
print(li)
# [[20, 30],[40, 50],[60, 70]]と出力される
print(type(li))
# <class 'list'>と出力される
print(type(li[0][0]))
# <class 'int'>と出力される
複数行からなる空白区切りの整数を受け取る(Part2)
次は、最初の行には2つの整数nとm
が空白で区切られnは行数を、mは各行の要素数(列数)を示すケースです。
# 例
# 入力値
# 最初の行の値は、行数と各行の要素数(列数)
3 4
1 2 3 4
5 6 7 8
9 10 11 12
n, m = map(int, input().split())
li = [list(map(int, input().split())) for _ in range(n)]
print(li)
# [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]と出力される
print(type(li))
# <class 'list'>と出力される
print(type(li[0][0]))
# <class 'int'>と出力される
最後に
最後まで読んでいただきありがとうございます。今回の【Python】input関数で様々な複数行の受け取り方はいかがでしたでしょうか。
Pythonの入力処理は、深い知識や理解が必要なことがあります。今回の記事を通じて、基本的な入力メソッドから高度なテクニックまでさまざまな方法を参考にしていただければと思います。
MacやLinux、Pythonなど技術系のkindle本も豊富にあります。詳しくはこちらから。
初めてkindle unlimited 読み放題をご利用の方は30日間の無料で体験できます。
期間終了後は月額980円で、いつでもキャンセルできます。
200万冊以上が読み放題。お好きな端末で利用可能です。