如何将字符串中的数字转换为实际数字

Posted

技术标签:

【中文标题】如何将字符串中的数字转换为实际数字【英文标题】:How to convert numbers in a string into actual numbers 【发布时间】:2013-10-13 18:23:41 【问题描述】:

我被赋予了一串数字,并被要求仅重现字符串中的数字,该函数在函数内打印,我可以使用以下功能进行操作。

# function that prints, no return the values in list
def reprint (f) :
    for numbers in (f):
        tokens = numbers.split(',')
        for values in tokens :

            print values,
        print


#Main        
stringlist =["1,25,999",
             "123.4,56.7890,13.571",
             "1,23.45,6,7.8"]

reprint (stringlist)

返回

1 25 999
123.4 56.7890 13.571
1 23.45 6 7.8

不过,诀窍是让浮点数打印小数点后 2 位,这就是我卡住的地方。我尝试添加类似

if '.' in values :
    print "%.2f" % (values)
else print "%d" % (values)

但这不起作用,我收到一条错误消息,说 print "3%d" % (values) 类型错误:%d 格式:需要一个数字,而不是 str。关于如何将字符串视为数字的任何想法?

预期输出 =

1 25 999
123.40 56.79 13.57
1 23.45 6 7.80

【问题讨论】:

不能使用任何类型的转换方法。这家伙强调如果'。在某种程度上,我猜这就是技巧的一部分 print "3%d" % (float(values)) 和类似的int() 用于第二种情况 如果字符串包含. 使用float() 将其转换为float 如果不是,使用int() 这是一种糟糕的输入格式 @ZachSantiago:no sort of conversion methods can be used 是什么意思? 【参考方案1】:

使用ast.literal_eval 将这些字符串转换为整数和浮点数的元组,然后使用isinstance 检查它是int 还是float

>>> from ast import literal_eval
for item in stringlist:
    tup =  literal_eval(item)
    for x in tup:
        if isinstance(x, float):
            print format(x, '.2f'),
        elif isinstance(x, int):
            print format(x, 'd'),
    print
...     
1 25 999
123.40 56.79 13.57
1 23.45 6 7.80

【讨论】:

任意用户输入是否安全? @livskiy 是的,请参阅help(ast.literal_eval) --> 安全地计算表达式节点或包含 Python 表达式的字符串...【参考方案2】:

使用float() 转换为浮点数,使用int() 转换为整数1。

if '.' in values :
   print "%.2f" % float(values)
else:
   print "%d" % int(values)

【讨论】:

【参考方案3】:

你可以替换

print values,

if '.' in values:
   print '%.2f' % float(values),
else:
   print values,

【讨论】:

【参考方案4】:

你可以这样做:

>>> stringlist
['1,25,999', '123.4,56.7890,13.571', '1,23.45,6,7.8']
>>> for line in stringlist:
...     for s in line.split(','):
...         if '.' in s:
...             try:
...                 f=float(s)
...             except ValueError:
...                 print ' is not a float'
...             else:
...                 print ':.2f'.format(f),
...         else:
...             try:
...                 i=int(s)
...             except ValueError:    
...                 print ' is not an int'.format(s)
...             else:
...                 print i,
...      print

【讨论】:

以上是关于如何将字符串中的数字转换为实际数字的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中使用混合类型将嵌套列表中的字符数字转换为数字

如何将数字中的字节转换为字符串? (数字的字符表示)

如何将数组中的数字字符串转换为数字?

如何将字符串数字转换为列表中的整数?

如何将切片字符串中的单个字符转换为 Python 中的整数?

如何将字符串中的多个数字转换为整数