2

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

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)

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

4

2 回答 2

2

您的代码的问题是,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']]
于 2013-09-20T07:13:18.247 回答
0

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

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']]
于 2013-09-20T07:45:46.910 回答