如何将多行输入存储到列表中?
例如:
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]
]
如果没有特定指标,您如何识别最终用户输入?
答案 0 :(得分:2)
继续调用input()
函数,直到它读入的行为空。使用.split
方法(没有args = space作为deliminator)。使用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 != ''
)。
但是,从the 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
来执行类型转换。
与上述相同。
答案 1 :(得分:2)
您可以使用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
中。
答案 2 :(得分:1)
这是一个有效的单行:
>>> 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']]