如何将多行输入存储到列表中(python)

时间:2018-02-25 17:50:25

标签: python list arr

如何将多行输入存储到列表中?

例如:

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]
]

如果没有特定指标,您如何识别最终用户输入?

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']]