Python 的输入输出处理
面试中的手撕——算法题或者是设计题,采用的是 ACM 的形式,即自己处理输入输出。而我们这些在力扣舒适圈待久了的人,这其实是比较陌生的,为了上战场时候的懵逼,我准备先演习一遍。
主要函数
从标准输入读取
- input():
https://docs.python.org/3/library/functions.html#input
这个是我们最常用的用于处理单行输入的函数,注意返回值是
str
类型(即别忘了做类型转换),也是我最推荐的万能处理方法。括号里面输入一个字符串,用来在输入前,提示用户输入。 - sys.stdin.readline():
类似input()
,需要 importsys
模块,这个函数是从标准输入中读取一行,并返回str
类型。 - sys.stdin.readlines():
这个函数是从标准输入中读取所有行,并返回一个list
类型,每个元素是一行的str
。
字符串处理
- split():
https://docs.python.org/3/library/stdtypes.html#str.split
这个函数是用来分割字符串的,默认是以空格为分隔符,返回一个list
类型。括号里面加','
也可以以逗号来分割字符串。 - strip():
https://docs.python.org/3/library/stdtypes.html#str.strip
这个函数是用来去除字符串两端的空格或换行符,返回一个str
类型。括号里面可以加参数来指定去除哪些字符。 - replace(old, new):
https://docs.python.org/3/library/stdtypes.html#str.replace
这个函数是用来替换字符串中的子串,返回一个str
类型。括号里面第一个参数是被替换的子串,第二个参数是替换成的子串。 - isdigit():
https://docs.python.org/3/library/stdtypes.html#str.isdigit
这个函数是用来判断字符串是否只包含数字,返回True
或False
。 - isnumeric():
https://docs.python.org/3/library/stdtypes.html#str.isnumeric
这个函数是用来判断字符串是否只包含数字和.
,返回True
或False
。 - join():
https://docs.python.org/3/library/stdtypes.html#str.join
这个函数是用来处理输出的,可以连接字符串,返回一个str
类型。括号里面加一个list
类型参数,用来指定连接的字符。 如', '.join(['1', '2', '3'])
就可以返回1, 2, 3
,''.join(['1', '2', '3'])
就可以返回'123'
。
单行
int
首先是对于 int 类型的处理,比如这个需求
1️⃣ '1 22 333 4444 55555' -> [1, 22, 333, 4444, 55555]2️⃣ '1, 22, 333, 4444, 55555' -> [1, 22, 333, 4444, 55555]3️⃣ ' 1 , 22, 333 ,4444, 55555 ' -> [1, 22, 333, 4444, 55555]
- 那么对于第一个用空格分割的需求我们可以
line = list(map(int, input().strip().split()))
- 对于第二和第三个用逗号分割的需求,我们可以
line = list(map(int, input().strip().split(',')))
str
需求如下
1️⃣ '1 22 333 4444 55555' -> ['1', '22', '333', '4444', '55555']2️⃣ ' 1, 2 2, 333 , 4444 , 5555 5 ' -> ['1', '2 2', '333', '4444', '5555 5']3️⃣ '...Q....' -> ['.', '.', '.', 'Q', '.', '.', '.'] // 类似N皇后的输入处理
- 对于第一个用空格分割的需求,我们可以
line = list(map(str, input().strip().split()))
- 对于第二个用逗号分割的需求,我们可以
line = list(map(str.strip, input().strip().split(',')))
- 对于第三个需求,我们可以
line = list(input())
多行
多行其实就是加个循环就可以了,单行处理都是同上的,一般它也被分为两种。
- 输入一个 m 行 n 列的矩阵,这里以处理成
List[List[int]]
的形式为例。
m, n = map(int, input().split())matrix = [list(map(int, input().strip().split())) for _ in range(m)]
- 处理未知行数的矩阵
matrix = []while True: line = input().strip() if line == '': break matrix.append(list(map(int, line.split())))