ビッグデータやAI等、多くのところから注目されているPython。勉強しはじめたので、少しずつまとめておきたい。

標準入力からデータを得る方法。Python 3にしか対応しないかもしれない。

1. 入力データのフォーマットは、1行だけの入力データ。ただし、その行に複数の整数がしまっている。

a = list(map(int, input().split()))

入力データがリストaに入る。

2. 入力データのフォーマットは1行に1つの整数。行数(データの数)が事前にわかる。

a = [int(input()) for i in range(10)]

入力データはリストaに格納される。データの個数はrange(n)のところで指定。

3. 入力データのフォーマットは1行に1つの整数、行数(データの数)が分からず、EOFまでとなる。

while True:
    try:
        a = int(input())
        print(a)
    except EOFError:
        break

また、同じ入力フォーマットに対して、sysを使えば、以下のようなコードでもOK。より簡潔になる。

import sys
for d in sys.stdin:
    print(sum(x**100 for x in range(int(d), 1000, int(d))))

4. 入力データのフォーマットは1行に複数の整数、行数(データの数)が分からず、EOFまでとなる。

while True:
    try:
        a = list(map(int, input().split()))
        print(len(str(a[0] + a[1])))  # 1行のデータ個数に対応して変更
    except EOFError:
        break

上の例では1行に2つのデータだが、行のデータ全体がリストaに入るので、2つ以上の複数データでも同様なコードで対応する。

それぞれの行にある複数のデータが整数ではなく、実数の場合は以下に変わる。

EPS = 0.0001
while True:
    try:
        a = list(map(float, input().split()))
        print("{0:.3f} {1:.3f}".format(a[1]/a[0]+EPS, a[2]/a[0]+EPS))
    except EOFError:
        break

EPSは実数の四捨五入誤差をなくすためのもの。試行錯誤してその値を決める。

5. 入力データのフォーマットは1行に複数の整数、行数(データの数)が入力の最初に与えられる。

n = int(input())
for i in range(n):
    a = list(map(int, input().split()))

6. 多少入力が高速になるには、以下のコードを先頭にいれるといいかもしれない。

import sys
from sys import stdin
input = stdin.readline

input()は従来とおり使ってよさそう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Post Navigation