【问题标题】:Multiline user input with list comprehension in Python 3Python 3 中具有列表理解的多行用户输入
【发布时间】:2015-10-17 00:25:51
【问题描述】:

这里是 Python 的新手。我正在使用 Python 3 解决 CodeAbbey 的问题,我希望帮助缩短用户输入的代码。

假设我想从用户那里得到这个输入:

3
2 3
4 5
6 7

第一行是case的数量,接下来的每一行都是case本身,有2个参数。到目前为止,我已经想办法这样做了:

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

但它不起作用。

【问题讨论】:

  • 不要使用列表推导,因为它们会让你更难让它工作。使用普通循环。
  • “问题是我宁愿询问列表理解中的所有输入” 为什么?更短并不总是更好。你已经拥有的更清楚了。
  • @ minitech♦ 我不知道,好吧...我只是假设对于用户来说,将输入粘贴到 1 go 中会更舒服,而不是:询问长度,询问案例。
  • @poke 你如何在这里使用普通循环?
  • 在获取用户输入的同时循环并收集列表中的数字。不要让它变得复杂,而要简单。

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


【解决方案1】:

我没有看到在列表理解中这样做的好处,但这里有一个允许将所有数据复制粘贴到的解决方案:

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()))' 有什么作用?我的意思是我知道范围 helmakes 迭代是可能的,但是 int(input()) 对数据有什么作用?顺便说一句,非常感谢您提供这段代码。谢谢。
  • 该位也在您的原始代码中,以获取Ninput() 提示用户输入一行输入。 int() 将用户输入的数据转换为数字(因此"3" 变为3)。 range(n) 创建从0n-1 的数字序列(有关range() 魔术的更多信息,请参阅here)。
【解决方案2】:

是的,你可以在列表理解中试试这个

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

【讨论】:

    【解决方案3】:

    我只是将它用于 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 输出控制台中使用这个编辑器?

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    相关资源
    最近更新 更多