在python中将输入隐藏到list元素中

时间:2017-04-07 14:49:52

标签: python-3.x

我在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')]

但它只返回第一个值。 我希望将所有值转换为列表并保持其完整性。

1 个答案:

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