如何从stdin一次读取“ n”行?

时间:2019-10-29 17:41:30

标签: python stdin readline readlines

考虑stdin具有以下条目:

2  
a     
b     
3
d   
e   
f   

现在,我想先使用n= sys.stdin.readline()来读取号码 然后使用功能n将下一行ReadNLines(n)读入列表。

所以预期的输出是:

List1 = ['a','b']  
List2 = ['d','e','f']

这是我尝试过的。而且我正在寻找更好的计时性能。

import sys
def ReadNLines(n):
    List =[]
    for line in range(n):
        List.append(sys.stdin.readline())
    return List

if __name__ == "__main__":
    n = sys.stdin.readline()
    List1 = ReadNLines(n)
    n = sys.stdin.readline()
    List2 = ReadNLines(n)

2 个答案:

答案 0 :(得分:0)

您需要删除sys.stdin.readline()包含在结果中的换行符。并且您需要将n转换为整数。

import sys
def ReadNLines(n):
    List =[]
    for _ in range(n):
        List.append(sys.stdin.readline().strip())

if __name__ == "__main__":
    n = int(sys.stdin.readline().strip())
    ReadNLines(n)
    n = int(sys.stdin.readline().strip())
    ReadNLines(n)

由于您从不使用line变量,因此约定将_用作虚拟变量。您还可以将函数转换为列表理解:

def readNLines(n):
    return [sys.stdin.readline().strip() for _ in range(n)]

答案 1 :(得分:0)

我认为这可以满足您的要求

import sys

def read_n_lines(n):
    return [sys.stdin.readline().rstrip() for _ in range(n)]

if __name__ == "__main__":
    count = 0
    while True:
        n = sys.stdin.readline().rstrip()
        if not n:  # Blank line entered?
            break  # Quit.
        n = int(n)
        result = read_n_lines(n)
        count += 1
        print(f'List{count} = {result}')
    print('done')

样品运行-按下 Enter 键结束输入的每一行:

2
a
b
List1 = ['a', 'b']
3
d
e
f
List2 = ['d', 'e', 'f']

done
相关问题