Python 如何阅读;";从stdin一次排几行?

Python 如何阅读;";从stdin一次排几行?,python,stdin,readline,readlines,Python,Stdin,Readline,Readlines,考虑到标准DIN具有以下条目: 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

考虑到标准DIN具有以下条目:

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)
由于您从不使用
变量,因此惯例是将
\uuu
用作虚拟变量。您还可以将函数转换为列表:

def readNLines(n):
    return [sys.stdin.readline().strip() for _ in range(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)
由于您从不使用
变量,因此惯例是将
\uuu
用作虚拟变量。您还可以将函数转换为列表:

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
列表1=['a','b']
3.
D
E
F
列表2=['d','e','f']
完成

我想这正是你想要的:

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
列表1=['a','b']
3.
D
E
F
列表2=['d','e','f']
完成

“这可能吗?”我想是的。你试过什么?你有什么错误吗?你能告诉我们你试过什么吗?为什么用
sys.stdin.readline()
代替
input()
?读一行,把它转换成整数。然后读取循环中的下一个
n
行。仅供参考,
readlines(n)
不读取
n
行。它读取
n
字节,然后将其拆分为行。“这可能吗?”我想是这样的。你试过什么?你有什么错误吗?你能告诉我们你试过什么吗?为什么用
sys.stdin.readline()
代替
input()
?读一行,把它转换成整数。然后读取循环中的下一个
n
行。仅供参考,
readlines(n)
不读取
n
行。它读取
n
字节,然后将其拆分为行。是的,我理解。但是我希望有一个比调用sys.stdin.readline n次更好的计时性能。为什么您认为这是一个性能问题?我想不出任何其他方法。您可以使用
sys.stdin.read()
,然后调用
splitlines()
,但这将读取所有stdin,而不仅仅是指定的行数。我想知道是否有其他方法花费更少的时间。我理解您所说的“更好的计时性能”的意思。我想不出什么。首先,在你担心时间之前,你需要把它改正过来。是的,我理解。但是我希望有一个比调用sys.stdin.readline n次更好的计时性能。为什么您认为这是一个性能问题?我想不出任何其他方法。您可以使用
sys.stdin.read()
,然后调用
splitlines()
,但这将读取所有stdin,而不仅仅是指定的行数。我想知道是否有其他方法花费更少的时间。我理解您所说的“更好的计时性能”的意思。我想不出什么。首先,在担心时间安排之前,你需要把它纠正过来。