[英]How to store multi-line input into a list (python)
您如何將多行輸入存儲到列表中?
例如:
3
2 1
1 1 0
2 1 1
4 3 0 1 2
2
1 2
1 3
我將如何接受該輸入並將其存儲為如下列表:
examList = [
[3],
[2,1],
[1,1,0],
[2,1,1],
[4,3,0,1,2],
[2],
[1,2],
[1,3]
]
如果沒有任何特定指標,您如何識別最終用戶輸入?
繼續調用input()
函數,直到它讀入的行為空。 使用.split
方法(沒有 args = space 作為分隔符)。 使用list-comp
將每個string
轉換為int
並將其附加到您的examList
。
這是代碼:
examList = []
i = input()
while i != '':
examList.append([int(s) for s in i.split()])
i = input()
根據您的輸入, examList
是:
[[3], [2, 1], [1, 1, 0], [2, 1, 1], [4, 3, 0, 1, 2], [2], [1, 2], [1, 3]]
上述方法適用於Python3
,它允許您調用input()
並且不輸入任何內容(這就是為什么我們使用它作為信號來檢查我們是否已完成 - i != ''
)。
但是,從docs 中,我們看到,在Python2
, input()
的空條目會引發EOF
錯誤。 為了解決這個問題,我想我們可以讓它在輸入諸如END
的字符串時結束多行輸入。 這意味着您必須用一行說'END'
來停止條目:
examList = []
i = raw_input()
while i != 'END':
examList.append([int(s) for s in i.split()])
i = raw_input()
請注意,我使用raw_input
作為不執行類型轉換。
其工作原理與上述相同。
您可以使用sys.stdin.readlines()
。
例如,從
import sys
user_input = sys.stdin.readlines()
此時user_input
的值應該是
['3\n', '2 1\n', '1 1 0\n', '2 1 1\n', '4 3 0 1 2\n', '2\n', '1 2\n', '1 3']
然后,您應該能夠通過執行以下處理來獲得所需的輸出
examList = []
for input_string in user_input:
examList.append([int(value) for value in input_string.split()])
我們在這里做的是迭代user_input
。 對於每個input_string
,我們split()
單詞,將它們轉換為int
並將它們放回新列表中。 然后,新列表將被添加到examList
。
這是一個有效的單線:
>>> inp = '''3
2 1
1 1 0
2 1 1
4 3 0 1 2
2
1 2
1 3'''
>>> [i.split() for i in inp.split('\n')]
[['3'], ['2', '1'], ['1', '1', '0'], ['2', '1', '1'], ['4', '3', '0', '1', '2'], ['2'], ['1', '2'], ['1', '3']]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.