【问题标题】:Python: Multiline input converted into a listPython:多行输入转换为列表
【发布时间】:2013-09-20 07:06:53
【问题描述】:

我有一个编程任务,我需要输入的所有输入都是多行的。 例如:

4 3
10 3
100 5
1000000000 8

或:

7 8 666
8 7 666
10 16 273

我正在尝试将这些行转换为列表。我不能使用文件,我需要能够使用输入语句将它们输入到程序中。

我遇到的问题是,我希望输出是:

[['4', '3'], ['10', '3'], ['100', '5'], ['1000000000', '8']]

所以我可以用它来完成我的程序的其余部分。但我得到的只是:

[['4', '3']]

我一直在尝试使用的代码是:

aString = input(" > ")
aString_list = [x for x in (y.split() for y in aString.split('\n')) if x]
print(aString_list)

我对如何让它读取其他行感到困惑。谢谢。

【问题讨论】:

    标签: python list input python-3.x multiline


    【解决方案1】:

    您的代码的问题是input() 在您按下 Enter 后立即停止,要获得连续输入,您需要使用 while 循环或 for 循环和接受输入,直到用户输入一个标记值:

    使用for循环和iter

    def multiline_input(sentinel=''):
        for inp in iter(input, sentinel):
            yield inp.split()
    ...         
    >>> lis = list(multiline_input())
    1 2 3
    400 500 600
    a b c
    
    >>> lis
    [['1', '2', '3'], ['400', '500', '600'], ['a', 'b', 'c']]
    

    使用while循环:

    def multiline_input(sentinel=''):
        while True:
            inp = input()
            if inp != sentinel:
                yield inp.split()
            else:
                break
    ...             
    >>> lis = list(multiline_input())
    1 2
    3 4 5
    6 7 8 9
    10
    
    >>> lis
    [['1', '2'], ['3', '4', '5'], ['6', '7', '8', '9'], ['10']]
    

    【讨论】:

      【解决方案2】:

      这可能是我不明白的地方,但是在这样的代码中表现在这里

      aString = """
      4 3
      10 3
      100 5
      1000000000 8
      """
      
      aString_list = [x for x in (y.split() for y in aString.split('\n')) if x]
      print(aString_list)
      

      我们得到一个结果:

      [['4', '3'], ['10', '3'], ['100', '5'], ['1000000000', '8']]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-17
        • 2022-11-23
        • 2014-05-10
        • 2013-10-12
        • 1970-01-01
        • 2013-02-13
        • 2019-07-14
        相关资源
        最近更新 更多