首页 > 解决方案 > 用于读取输入的 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使用循环读取此类输入?

标签: pythonpython-3.x

解决方案


您收到错误的原因是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])

推荐阅读