我在python中有一个输入,如下所示:
20.1
25.9
31.2
33.2
31.2
25.5
28.1
23.2
stop
它是一系列浮点数,每个浮点数都在一个单独的行上。我希望迭代它们或将它们转换成列表进行迭代,但我无法找到正确的方法来完成它。 到目前为止,我已经尝试过这个:
list = [float(n) for n in input().split('\n')]
但它只返回第一个值。 我希望将所有值转换为列表并保持其完整性。
答案 0 :(得分:0)
输入函数只读取一行。您需要多次调用它并检查“停止”。
import sys
mylist = []
for line in sys.stdin:
if line.startswith('stop'):
break
else:
mylist.append(float(line))
print(mylist)
itertools.dropwhile
可以为您完成一些工作。给它一个函数,当迭代停止时返回一个False值,加上一个序列,你可以在列表中进行工作。
import sys
import itertools
def not_stop_condition(line):
"""Return True unless a line with 'stop' is seen"""
return not line.startswith('stop')
mylist = [float(line) for line in itertools.takewhile(
not_stop_condition, sys.stdin)]
print(mylist)
只需实现not_stop_condition
这样的简单表达式的小函数就可以放在lambda
中。 lambda
只是一个匿名函数 - 它使用任意数量的参数调用,并返回表达式求值的任何内容。
import sys
import itertools
mylist = [float(line) for line in itertools.takewhile(
lambda line: not line.startswith('stop'), sys.stdin)]
print(mylist)