【问题标题】:Get a list of numbers as input from the user获取用户输入的数字列表
【发布时间】:2011-06-07 11:47:48
【问题描述】:

我尝试使用input (Py3) /raw_input() (Py2) 来获取数字列表,但是使用代码

numbers = input()
print(len(numbers))

输入[1,2,3]1 2 3 分别给出75 的结果——它似乎将输入解释为一个字符串。有什么直接的方法可以列出清单吗?也许我可以使用re.findall 来提取整数,但如果可能的话,我更愿意使用更 Pythonic 的解决方案。

【问题讨论】:

    标签: python list input


    【解决方案1】:

    解析由空格分隔的数字列表比尝试解析 Python 语法要容易得多:

    Python 3:

    s = input()
    numbers = list(map(int, s.split()))
    

    Python 2:

    s = raw_input()
    numbers = map(int, s.split())
    

    【讨论】:

    • python 2.7 raw_input() 重命名为 input() 之后。堆栈溢出answer
    • 如果我的输入具有混合数据类型字符串和整数,那么我该如何拆分它们并转换为列表。输入:'aaa' 3 45 554 'bbb' 34 'ccc' 我添加了空格分隔的内容!
    • @FarhanPatel 这是一个不相关的问题,所以我建议提出一个新问题。如果您想在带引号的字符串中允许空格,请从循环 s.split()shlex.split(s) 开始。
    • 将它作为一个新问题发布,谢谢鼓励,很吓人它可能不会被标记为重复! stackoverflow.com/questions/43822895/…
    【解决方案2】:

    eval(a_string) 将字符串计算为 Python 代码。显然这并不是特别安全。您可以使用ast 模块中的literal_eval 函数获得更安全(更受限制)的评估。

    raw_input() 在 Python 2.x 中被称为是因为它是原始的,而不是“解释的”输入。 input() 解释输入,即等同于 eval(raw_input())

    在 Python 3.x 中,input() 执行 raw_input() 过去所做的事情,如果这是您想要的(即 eval(input())),您必须手动评估内容。

    【讨论】:

      【解决方案3】:

      你可以使用.split()

      numbers = raw_input().split(",")
      print len(numbers)
      

      这仍然会给你字符串,但它会是一个字符串列表。

      如果您需要将它们映射到一个类型,请使用列表推导:

      numbers = [int(n, 10) for n in raw_input().split(",")]
      print len(numbers)
      

      如果您希望能够输入任何 Python 类型并自动映射并且您信任您的用户隐式,那么您可以使用eval

      【讨论】:

        【解决方案4】:

        您可以将列表的字符串表示形式传递给 json:

        import json
        
        str_list = raw_input("Enter in a list: ")
        my_list = json.loads(str_list)
        

        用户像在 python 中一样输入列表:[2, 34, 5.6, 90]

        【讨论】:

          【解决方案5】:

          答案是微不足道的。试试这个。

          x=input()

          假设[1,3,5,'aA','8as'] 作为输入给出

          print len(x)

          这给出的答案是 5

          print x[3]

          这给了'aA'

          【讨论】:

            【解决方案6】:

            在 Python 3.x 中,使用这个。

            a = [int(x) for x in input().split()]
            

            示例

            >>> a = [int(x) for x in input().split()]
            3 4 5
            >>> a
            [3, 4, 5]
            >>> 
            

            【讨论】:

            • 这可以接受除 int 以外的不同数据类型吗?即我可以用string(x)替换int(x)
            • @StevenVascellaro 是的,虽然表达式是 str(x) 而不是 string(x),因为 str 是 python 的字符串表达方式
            • @DhirajBarnwal 如果你想知道那里发生了什么:input() 读取输入 + split() 将输入拆分为空格 + [f(x) for x in iter] 循环遍历每个 + int把每个变成一个int。如果您想知道如何想出它:主要是弄清楚您想做什么以及需要组合哪些部分来实现它。
            • 如果您有 @Dukeling 在 cmets 中所做的额外 2 行解释,我会 +1。
            【解决方案7】:

            试试这个,

            n=int(raw_input("Enter length of the list"))
            l1=[]
            for i in range(n):
                a=raw_input()
                if(a.isdigit()):
                    l1.insert(i,float(a)) #statement1
                else:
                    l1.insert(i,a)        #statement2
            

            如果列表的元素只是一个数字,则语句 1 将被执行,如果它是一个字符串,则语句 2 将被执行。最后你会得到一个你需要的列表 l1。

            【讨论】:

              【解决方案8】:

              另一种方法是为此使用 for 循环。 假设您希望用户在名为“memo”的列表中输入 10 个数字

              memo=[] 
              for i in range (10):
                  x=int(input("enter no. \n")) 
                  memo.insert(i,x)
                  i+=1
              print(memo) 
              

              【讨论】:

              • 我认为这并不比公认的答案更简单。
              • 这将每个数字作为单独的输入,在单独的行上。这个问题意味着单行输入只需调用input...
              【解决方案9】:
              a=[]
              b=int(input())
              for i in range(b):
                  c=int(input())
                  a.append(c)
              

              上面的代码 sn-ps 是从用户那里获取值的简单方法。

              【讨论】:

                【解决方案10】:
                num = int(input('Size of elements : '))
                arr = list()
                
                for i in range(num) :
                  ele  = int(input())
                  arr.append(ele)
                
                print(arr)
                

                【讨论】:

                  【解决方案11】:

                  获取用户输入的数字列表。

                  这可以通过在 python 中使用 list 来完成。

                  L=list(map(int,input(),split()))
                  

                  这里L表示列表,ma​​p用于将输入与位置进行映射,int指定用户输入的数据类型在整数数据类型,split()用于按空格分割数字。

                  .

                  【讨论】:

                    【解决方案12】:

                    我认为,如果您在没有第一个答案中提到的 split() 的情况下这样做。它适用于所有没有空格的值。所以你不必像第一个答案那样给出空格,我猜这更方便。

                    a = [int(x) for x in input()]
                    a
                    

                    这是我的输出:

                    11111
                    [1, 1, 1, 1, 1]
                    

                    【讨论】:

                    • 如果我想通过1, 11, 111或者11, 1, 111怎么办?在您的程序中,它们都将是 1, 1, 1, 1, 1, 1... 底线,这仅适用于 single digit 数字,这是非常严格的...
                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2014-06-27
                    • 2022-01-20
                    • 1970-01-01
                    • 1970-01-01
                    • 2022-11-24
                    • 2016-05-28
                    • 2015-07-04
                    相关资源
                    最近更新 更多