Python 3中使用列表推导式实现多行用户输入

4

我是一名完全不懂Python的新手。我正在使用Python 3解决CodeAbbey的问题,并希望能够缩短用户输入代码的长度。

假设我想从用户那里获取以下输入:

3
2 3
4 5
6 7

第一行是案例数量,其余每行都包含两个参数的案例。到目前为止,我已经想出了以下方法来处理:

N=int(input('How many cases will you calculate?\n'))
print('Input parameters separated by spaces:')
entr = [list(int(x) for x in input().split()) for i in range(N)]

事实上,我更愿意在列表推导式中询问所有的输入,然后将N赋值为entr [0]。但是如何让列表推导式在不使用range(N)的情况下将输入分成几行呢?
我试过:
entr = [list(int(x) for x in input().split()) for x in input()]

但它无法正常工作。


2
当列表推导式使问题变得更难时,不要使用它们。使用普通循环。 - poke
“问题是,我更愿意在列表推导式中询问所有的输入。” 为什么?更短并不总是更好。你已经拥有的方式更清晰。 - Ry-
@ minitech♦ 我不知道,嗯...我只是认为对于用户来说,一次性粘贴输入会更方便,而不是:询问长度,询问大小写。 - MPadilla
@poke 在这里你会如何使用普通循环? - MPadilla
只需循环获取用户输入并将数字收集到列表中即可,不要让它变得复杂,保持简单。 - poke
4个回答

7

我不认为在列表推导式中进行此操作有什么好处,但以下是一种解决方案,可以将所有数据复制粘贴:

entr = [list(int(x) for x in input().split())
        for i in range(int(input()))]
N = len(entr)

您的解决方案非常接近。外部迭代只需要给予一个可迭代的对象(使用range()),而不是单个数字。


'for i in range(int(input()))' 这段代码的作用是什么?我的意思是,我知道range可以实现迭代,但int(input())对数据做了什么处理呢?顺便说一下,非常感谢你提供这段代码。谢谢。 - MPadilla
那一部分也在你的原始代码中,用于获取 Ninput() 提示用户输入一行输入。int() 将用户输入的数据转换为数字(因此 "3" 变成了 3)。range(n) 创建一个从 0n-1 的数字序列(有关 range() 魔法的更多信息,请参见这里)。 - vinod

0
我只是在 Python 列表输入中使用了这个。
n = int(input())
a = [list(map(input().split())) for i in range(n)]
print(a)
'''
3
2 3
4 5
6 7
[[2, 3],[4, 5], [6,7]]
'''

arr = []
for i in range(int(input())):
    a = list(map(int,input().split()))
    arr.append(a)
print(arr)

'''
3
2 3
4 5
6 7
[[2, 3],[4, 5], [6,7]]'''

''' or in single list '''
arr = []
for i in range(int(input())):
    a,b = map(int,input().split())
    arr += [a,b]
print(arr)

'''
3
2 3
4 5
6 7
[2,3,4,5,6,7]'''
    

我是新手,如何在这个编辑器中使用Python输出控制台?

目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community
这并没有真正回答问题。如果您有不同的问题,可以通过点击提问来提出。如果您想在此问题获得新的答案时得到通知,您可以关注此问题。一旦您拥有足够的声望,您还可以添加悬赏以吸引更多关注。- 来自审核 - PKo

0

你可以在列表推导式中尝试这个

cases = [input().split() for _ in range(int(input()))]
flatList = [int(item) for elem in cases for item in elem]
print(flatList)

-1

这里输入被视为整数。但你可以根据需求进行更改。 同时,4将是您插入的输入数量,这也可以根据需求进行编辑。

enter = list(i for i in (int(input() for i in range(4)))
print(enter)

目前你的回答不够清晰。请编辑并添加更多细节,以帮助其他人理解它如何回答所提出的问题。你可以在帮助中心找到有关如何撰写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接