輸入函數只讀取一行。您需要多次調用並檢查「停止」。
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
。 A lambda
只是一個匿名函數 - 用任意數量的參數調用並返回表達式計算的任何值。
import sys
import itertools
mylist = [float(line) for line in itertools.takewhile(
lambda line: not line.startswith('stop'), sys.stdin)]
print(mylist)
使用其他空格(例如'''')來分隔它們的'input's會不會更容易? –
@Chris_Rands - 我們不知道輸入來自哪裏。改變來源可能是不可能的。將行分隔的數據傳送到程序中是正常的,如果輸入變大,則它是更好的方法。考慮一個擁有1000萬浮點數的數據集。 – tdelaney
謝謝,它真的有效,** lambda **函數是什麼? – Leonor