【问题标题】:How to store multi-line input into a list (python)如何将多行输入存储到列表中(python)
【发布时间】:2018-02-25 17:50:25
【问题描述】:

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

例如:

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

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

【问题讨论】:

    标签: python list arr


    【解决方案1】:

    继续调用input() 函数,直到它读入的行为空。使用 .split 方法(无 args = 空格作为分隔符)。使用 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 来不执行类型转换。

    其工作原理与上述相同。

    【讨论】:

    • @HuStmpHrrr Python2 已经过时了,我怀疑他们是否在使用它,快速浏览 OPs 的其他问题表明他们确实使用 Python3
    • @Joelddon 您的代码在运行时导致“EOFError: EOF when reading a line”。您将如何确定输入的结尾?
    • @WilliamMerritt 我会更新答案,你一定在 Python2 上,对吗?
    • @Joelddon 我正在运行 Python3。
    • @Joelddon,该代码在获取输入的最后一个元素(在本例中为“1 3”)时仍然存在问题。我不明白 while i != '' 如何成功地迭代到输入的末尾。仍然出现 EOF 错误。
    【解决方案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

    【讨论】:

      【解决方案3】:

      这是一个有效的单行:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-09
        • 1970-01-01
        相关资源
        最近更新 更多