如何从标准输入一次读取 "n" 行?

How to read "n" lines at a time from stdin?

考虑标准输入有以下条目:

2  
a     
b     
3
d   
e   
f   

现在我想先使用 n= sys.stdin.readline() 读取数字 然后使用函数 ReadNLines(n) 将接下来的 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)

您需要删除 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)]

我认为这符合您的要求:

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