根据最佳选项,将字符串转换为整数、浮点数或保留为字符串。

3

我正在处理一个只包含str的数据集,但是str的值可以是真正的文本,也可以是像"1.0""3.54"这样的东西。

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

最好的方法是什么?


2
字符串"1.0"明显是代表一个浮点数(即使它是一个整数值的浮点数)- 为什么你不想将它转换为浮点数呢? - alani
4个回答

3

让我们试试

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

except ValueError:
    return txt

我现在的想法是,输入要么是一个数字,要么不是,无论如何我们都可以将其转换为浮点数。如果可以被1整除,就是整数,我们完成了。否则它就是浮点数,我们完成了。其他情况:我们无能为力,只能返回它。


0
你可以使用 try except 块来执行操作。
for s in string:
    try:
        //convert to int or float
    except:
        pass

我认为你的回答并没有确切地回答问题。虽然你应该转换为 intfloat,但用户想要知道具体细节。 - lmiguelvargasf

0

你可以使用

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'>

0
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

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