【问题标题】:Convert string to int, float or leave it as string, depending on the best option将字符串转换为 int、float 或将其保留为字符串,具体取决于最佳选项
【发布时间】:2020-08-11 15:39:49
【问题描述】:

我正在尝试处理仅包含 str 的数据集,但 str 的值可以是真实文本,也可以是 "1.0""3.54" 之类的内容。

我想将所有字符串转换为可能的最佳类型,这意味着1.0 应转换为int3.54 应转换为float,其他所有内容应保持str

最好的方法是什么?

【问题讨论】:

  • 字符串"1.0" 显然是用来表示一个浮点数(即使它是一个整数值)——你为什么不想把它转换成浮点数呢?

标签: python string floating-point integer


【解决方案1】:

让我们试试

def convert(txt):
try:
    k = float(txt)
    if k%1 ==0:
        return int(k)
    return k

except ValueError:
    return txt

现在我在想的是,输入要么是数字,要么不是, 无论如何,我们可以浮动它。如果它也可以被 1 整除,那么它就是一个 int,我们就完成了。如果不是,那么它毕竟是一个浮点数,我们就完成了。 任何其他情况:我们无能为力,然后我们将其退回

【讨论】:

    【解决方案2】:

    您可以使用try except 块来执行操作。

    for s in string:
        try:
            //convert to int or float
        except:
            pass
    

    【讨论】:

    • 我认为您的回答并不能完全解决所问的问题。您应该转换为 intfloat 但这些细节是用户要求的。
    【解决方案3】:

    你可以使用

    strings = ["some weird junk", "1.0", "2.345", -1000]
    
    for string in strings:
        try:
            number, decimal = string.split(".")
            try:
                if decimal == "0":
                    value = int(number)
                else:
                    value = float(string)
            except:
                value = string
        except (ValueError, AttributeError):
            try:
                value = int(string)
            except ValueError:
                value = string
    
        print(value, type(value))
    

    产量

    some weird junk <class 'str'>
    1 <class 'int'>
    2.345 <class 'float'>
    -1000 <class 'int'>
    

    【讨论】:

      【解决方案4】:
      def convert(string):
          possible = [str, int, float]
          for func in possible:
              try:
                  result = func(string)
              except ValueError:
                  continue
              if str(result) == string and type(result) is not str:
                  return result
          return string
      
      strings = ['hello', '1', '1.0', '1.9']
      for string in strings:
         result = convert(string)
         print(type(result), result)
      
      Output:
      <class 'str'> hello
      <class 'int'> 1
      <class 'float'> 1.0
      <class 'float'> 1.9
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-14
        • 1970-01-01
        • 2013-03-02
        • 2013-03-04
        • 1970-01-01
        相关资源
        最近更新 更多