我一直想学习更好,更短的编码方式,所以我有一个非常复杂的输入,我想可以将其编写为更简单的方式:
我有一个未知的float输入大小,并且当最后一个输入是新行时,我想将每一行变成一个数组。
import sys
input_matrix = []
for line in sys.stdin:
if line != '\n':
str_input = line.split(" ")
float_input = []
for i in range(len(str_input)):
float_input.append(float(str_input[i]))
input_matrix.append(float_input)
else:
break
输入内容如下:
2.0 9.0 3.2 0.1 2.0
10 19 2.0
18 20 1.0 1.5
答案 0 :(得分:4)
专门用于此用例的内置iter
has a second form。
iter()
第二种形式的一个有用的应用是读取行 文件[或标准输入]直到到达特定行。
使用此功能,您只需一个列表即可获得相同的结果。
input_matrix = [[float(x) for x in line.split()] for line in iter(input, '')]
print(input_matrix)
2.0 9.0 3.2 0.1 2.0
10 19 2.0
18 20 1.0 1.5
[[2.0, 9.0, 3.2, 0.1, 2.0], [10.0, 19.0, 2.0], [18.0, 20.0, 1.0, 1.5]]
答案 1 :(得分:0)
>>>import sys
>>>input_matrix = []
>>> while True:
... line = sys.stdin.readline().strip()
... if not line:
... break
... input_matrix.append(map(float, line.split()))
...
2.0 9.0 3.2 0.1 2.0
10 19 2.0
18 20 1.0 1.5
>>> input_matrix
[[2.0, 9.0, 3.2, 0.1, 2.0], [10.0, 19.0, 2.0], [18.0, 20.0, 1.0, 1.5]]
答案 2 :(得分:0)
为什么不使用小列表理解。它可能在此代码中节省2行,但是在大型程序中,它可以节省很多行,并且不要忘记导入sys
否则它会显示错误。这是代码:
import sys
input_matrix = []
for line in sys.stdin:
if line != '\n':
str_input = line.split(" ")
float_input = [str_input[i] for i in range(len(str_input))]
input_matrix.append(float_input)
else:
break