在Python中将stdin-lines转换为“ float / int”数组的更简单方法

时间:2018-06-23 00:37:21

标签: arrays string python-3.x input casting

我一直想学习更好,更短的编码方式,所以我有一个非常复杂的输入,我想可以将其编写为更简单的方式:

我有一个未知的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

3 个答案:

答案 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