sys.stdin
- python3中使用
sys.stdin.readline()
可以实现标准输入,其默认输入的格式是字符串,如果是int,float类型则需要强制转换。 sys.stdin.readline()
每次读出一行内容,所以,读取时占用内存小,比较适合大文件,该方法返回一个字符串对象;sys.stdin.readline()
会读取末尾'\n'
,加.strip()
,去掉回车符,同时去掉前后的空格。read([size])
从文件当前位置起读取size个字节,若无参数size,则表示读取至文件结束为止,它范围为字符串对象。readlines()
读取整个文件所有行,保存在一个列表(list)变量中,每行作为一个元素,但读取大文件会比较占内存
1. 输入一行
1.1 输入一个数或字符
>>> import sys
#输入一个字符(串)
>>> str=sys.stdin.readline()
abc
>>> print(len(str))
4
>>> str=sys.stdin.readline().strip()
>abc
>>> print(len(str))
3
#输入一个数
>>> num=sys.stdin.readline().strip()
921
>>> print(len(num))
3
1.2 输入多个数
>>> import sys
>>> num=sys.stdin.readline()
1 2 3
>>> print(len(num))
6
>>> type(num)
<class 'str'>
>>> num=sys.stdin.readline().strip()
1 2 3
>>> print(len(num))
5
>>> print(num)
1 2 3
>>> num=sys.stdin.readline().split()
1 2 3
>>> print(len(num))
3
>>> print(num)
['1','2','3']
>>> type(num)
<class 'list'>
>>> a,b,c=sys.stdin.readline().split()
1 2 3
>>> print(a)
1
>>> print(len(a))
1
>>> type(a)
<class 'str'>
#转换为int类型
>>> num=[int(n) for n in sys.stdin.readline().split()]
1 2 3
>>> print(num)
[1,2,3]
>>> a,b,c=[int(n) for n in sys.stdin.readline().split()]
1 2 3
>>> a
1
>>> num=map(int,sys.stdin.readline().split())
1 2 3
>>> print(num)
<map object at 0x000000D6BEFE89E8>
>>> num=list(num)
>>> print(num)
[1,2,3]
2. 输入多行
2.1 行数已知
>>> import sys
#已知行数n,一行有任意个字符字符串都可以
#示例1
>>> seq[]
>>> for i in range(n):
... line=sys.stdin.readline().strip()
... value=list(map(int,line.split()))
... seq+=value
...
1 2 3
2 4
>>> print(seq)
[1,2,3,2,4]
#示例2
>>> ans=[]
>>> for i in range(n):
... line=list(map(int,sys.stdin.readline().split()))
... ans.append(line)
...
1 2 3
2 4
>>> print(ans)
[[1,2,3],[2,4]]
2.2 行数未知
#示例1
>>> seq=[]
>>> while 1:
... line=sys.stdin.readline().strip() #line此时是字符串列表,并已去掉前后空格、回车符
... if line:
... line=list(map(int,line.split()))
... else:
... break
... seq.append(line)
... print(seq)
#示例2
>>> lines=sys.stdin.readlines()
3
2 3
3 5
1 4
7 8 9
^Z
>>> print(lines)
['3\n','2 3\n','3 5\n','1 4\n','7 8 9\n']
>>> n=lines[0].split()
>>> print(n)
2
>>> seq=[]
>>> for line in lines[1:-1]:
... if not line.split():
... continue
... l=list(map(int,line.split()))
... seq.append(l)
>>> print(seq)
[[2,3],[3,5],[1,4]]
>>> ab=list(map(int,lines[-1]).split()))
>>> print(ab)
[7,8,9]
#示例3
>>> seq=[]
>>> for line in sys.stdin:
... nums=line.split()
... if int(nums[0])==0:
... break
... else:
... seq.append(list(map(int,line.split())))
...
2 3
3 5
0
>>> print(seq)
[[2,3],[3,5]]
input()
1.一行输入
1.1 输入一个数/字符串
>>> s = input()#一个字符
abc
>>> num=int(input())#一个数字
23
>>> print(s,num)
abc 23
1.2 输入一个数组
>>> nums = [int(i) for i in input().split()]
11 15 18 21
>>> print(nums)
[11,15,18,21]
2. 两行输入
两行读取要在一行读取的基础上再进行一些操作。这里举个例子,假设第一行输入数组长度,第二行输入数组,那么读入操作分两步,首先获得数组长度,然后获取数组。
>>> s = input()
>>> if s != "":
... length = int(s)
... nums = [int(i) for i in input().split()]
... print(length, nums)
3. 多行输入
>>> data = []
>>> length = int(input())
>>> n = 0
>>> while n < length:
... s = input()
... if s != "":
... temp = [i for i in s.split()]
... data.append(temp)
... n = n + 1
... else:
... break
>>> print(data)