簡體   English   中英

如何將多行輸入存儲到列表中(python)

[英]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 中,我們看到,在Python2input()的空條目會引發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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM