【问题标题】:Converting a string in the form of a list to a list of integers将列表形式的字符串转换为整数列表
【发布时间】:2021-10-29 04:09:24
【问题描述】:

我有一个列表,其中包含类型为字符串的数字。如何将输入转换为整数列表?

输入:

'[1, 3, 6, 8]'

想要的输出:

[1, 3, 6, 8]

【问题讨论】:

    标签: python string list integer


    【解决方案1】:

    您可以在这里使用eval(),并直接评估您的字符串输入:

    inp = '[1, 3, 6, 8]'
    output = eval(inp)
    print(output)  # [1, 3, 6, 8]
    

    另一种方法,使用re.findall

    output = [int(x) for x in re.findall(r'\d+', x)]
    print(output)  # [1, 3, 6, 8]
    

    【讨论】:

      【解决方案2】:

      使用正则表达式

      ip ='[1, 3, 6, 8]'
      
      import re
      opt = [int(a) for a in re.findall("\d+",ip)]
      print(opt)
      

      【讨论】:

        【解决方案3】:
        import ast
        
        
        my_list = ast.literal_eval('[1, 3, 6, 8]')
        

        另一种选择是内置函数eval(),但ast.literal_eval() 更安全。你可以阅读更多here

        【讨论】:

          【解决方案4】:

          使用正则表达式re.findall可以实现如下:

          import re
          test_string = '[1, 3, 6, 8]'
          res = re.findall(r'\d+', test_string)
          # Map every entry to int
          res = list(map(int, res))
            
          print (res)
          

          【讨论】:

            【解决方案5】:

            如果您想要一种安全的方式而不导入任何库:

            s = '[1, 3, 6, 8]'
            print(list(map(int, ''.join(i if i.isdigit() else ' ' for i in s).split())))
            

            输出:

            [1, 3, 6, 8]
            

            解释:

            让我们看看这条线:

            list(map(int, ''.join(i if i.isdigit() else ' ' for i in s).split()))
            

            在外部,我们只是将字符串列表映射到整数,所以让我们先摆脱这部分:

            ''.join(i if i.isdigit() else ' ' for i in s).split()
            

            现在我们可以看到我们正在用空格替换s字符串中不是数字的每个字符,然后我们用空格分割字符串,导致

            ['1', '3', '6', '8']
            

            然后可以将其映射到整数列表。

            【讨论】:

              【解决方案6】:

              我建议使用来自JSON standard library的方法json.loads

              import json
              
              string = '[1, 3, 6, 8]'
              res = json.loads(string)
              print(res)
              #=> [1, 3, 6, 8]
              

              并得到所需的整数列表:

              all([ isinstance(e, int) for e in res ])
              #=> True
              

              【讨论】:

                猜你喜欢
                • 2019-04-16
                • 1970-01-01
                • 2017-11-24
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-06-19
                • 1970-01-01
                • 2017-10-04
                相关资源
                最近更新 更多