Python input() 没有读取整个输入数据
Python input() does not read whole input data
我正在尝试从 stdin 读取数据,实际上我正在使用 Ctrl+C、Ctrl+V 将值传递到 cmd,但它在某个时候停止了该过程。它总是同一个点。输入文件是.in类型,格式是第一行是一个数字,接下来的3行是用space分隔的一组数字。我正在使用 Python 3.9.9。较长的文件(集合中的元素数量 > 10000)也会出现此问题,而短输入则一切正常。好像内存刚刚 运行 了。我有以下方法:
def readData():
# Read input
for line in range(5):
x = list(map(int, input().rsplit()))
if(line == 0):
nodes_num = x[0]
if(line == 1):
masses_list = x
if(line == 2):
init_seq_list = x
if(line == 3):
fin_seq_list = x
return nodes_num, masses_list, init_seq_list, fin_seq_list
以及有效的数据:
6
2400 2000 1200 2400 1600 4000
1 4 5 3 6 2
5 3 2 4 6 1
和长输入文件:
https://pastebin.com/atAcygkk
它在序列处停止:... 2421 1139 322],所以它就像第 4 行的一部分。
要从“标准输入”读取输入,您只需要使用 stdin
流。由于您的数据都在行上,您可以只读到 EOL 定界符,而不必自己使用一些索引号来跟踪行。此代码将在 运行 为 python3.9 sowholeinput.py < atAcygkk.txt
或 cat atAcygkk.txt| python3.9 sowholeinput.py
.
时起作用
def read_data():
stream = sys.stdin
num = int(stream.readline())
masses = [int(t) for t in stream.readline().split()]
init_seq = [int(t) for t in stream.readline().split()]
fin_seq = [int(t) for t in stream.readline().split()]
return num, masses, init_seq, fin_seq
有趣的是,正如您所描述的那样,当使用终端 cut-and-paste 粘贴文本时,它不起作用。这意味着该方法的限制,而不是 Python 本身。
我正在尝试从 stdin 读取数据,实际上我正在使用 Ctrl+C、Ctrl+V 将值传递到 cmd,但它在某个时候停止了该过程。它总是同一个点。输入文件是.in类型,格式是第一行是一个数字,接下来的3行是用space分隔的一组数字。我正在使用 Python 3.9.9。较长的文件(集合中的元素数量 > 10000)也会出现此问题,而短输入则一切正常。好像内存刚刚 运行 了。我有以下方法:
def readData():
# Read input
for line in range(5):
x = list(map(int, input().rsplit()))
if(line == 0):
nodes_num = x[0]
if(line == 1):
masses_list = x
if(line == 2):
init_seq_list = x
if(line == 3):
fin_seq_list = x
return nodes_num, masses_list, init_seq_list, fin_seq_list
以及有效的数据:
6
2400 2000 1200 2400 1600 4000
1 4 5 3 6 2
5 3 2 4 6 1
和长输入文件: https://pastebin.com/atAcygkk 它在序列处停止:... 2421 1139 322],所以它就像第 4 行的一部分。
要从“标准输入”读取输入,您只需要使用 stdin
流。由于您的数据都在行上,您可以只读到 EOL 定界符,而不必自己使用一些索引号来跟踪行。此代码将在 运行 为 python3.9 sowholeinput.py < atAcygkk.txt
或 cat atAcygkk.txt| python3.9 sowholeinput.py
.
def read_data():
stream = sys.stdin
num = int(stream.readline())
masses = [int(t) for t in stream.readline().split()]
init_seq = [int(t) for t in stream.readline().split()]
fin_seq = [int(t) for t in stream.readline().split()]
return num, masses, init_seq, fin_seq
有趣的是,正如您所描述的那样,当使用终端 cut-and-paste 粘贴文本时,它不起作用。这意味着该方法的限制,而不是 Python 本身。