Python 如何阅读;";从stdin一次排几行?
考虑到标准DIN具有以下条目: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
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,而不仅仅是指定的行数。我想知道是否有其他方法花费更少的时间。我理解您所说的“更好的计时性能”的意思。我想不出什么。首先,在担心时间安排之前,你需要把它纠正过来。