python - 用于读取输入的 StdIn 黑客排名挑战
问题描述
在 Hackerrank 挑战中最让我感到沮丧的一件事是通过stdin
.
Hackerrank 输入通常有一个\n
分隔符,通过sys.stdin
. 我想知道一种有效的方法来读取输入并将它们拆分为list
. 一个例子如下:
输入:
3 2
1 5 3
3 1
5 7
我想将每一行读入一个单独的list
. 以下是我的尝试:
import sys
arr = sys.stdin.readlines()[1].split()
arr = list(map(int, arr))
A = sys.stdin.readlines()[2].split()
A = set(map(int, A))
B = sys.stdin.readlines()[3].split()
B = set(map(int, B))
我收到以下错误:
A = sys.stdin.readlines()[2].split()
IndexError: list index out of range
为什么IndexError
在[2]
哪里[1]
工作?有没有更好的方法来stdin
使用循环读取此类输入?
解决方案
您收到错误的原因是readlines
在第一次通话时消耗了您的所有输入。这意味着你第二次调用它时,那里什么都没有。
要制作所有输入的 2D 列表,您必须使用第一个调用:
data = [line.rstrip().split() for line in sys.stdin.readlines()]
您也可以预先转换为整数:
data = [[int(x) for x in row] for row in data]
现在
arr = data[0]
A = set(data[2])
B = set(data[3])
推荐阅读
- sql-server - 码头工人:来自守护进程的错误响应:驱动程序在端点funny_golick上编程外部连接失败
- python - 使用 tensorflow.data 生成图像和多个标签的数据集
- javascript - JSON 反应数组
- android - 在 Activity 中,是否可以在 super.onCreate 之前访问 savedInstanceState?
- html - 是否可以使用多个按钮/“for”属性切换相同的复选框(仅在 html/css 中)
- assembly - 改变一大块内存的字节序
- python - Python-matplotlib:如何在调用 plt.show() 后重新显示子图?
- python - 我们在 VS 代码中有 Manage.py 任务吗
- python - 如何获得不和谐的长度。嵌入 [DISCORD.PY]
- cassandra - 如果要删除数十亿个条目,如何选择 tombstone_failure_threshold 值?