如何将字符串中的数字转换为实际数字
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
【讨论】:
以上是关于如何将字符串中的数字转换为实际数字的主要内容,如果未能解决你的问题,请参考以下文章