在Python中,如何将浮点数列表转换为具有特定格式的字符串?

时间:2013-04-21 04:06:12

标签: python string python-2.7 floating-point

我有一个浮点数元组的列表,类似于

[ (1.00000001, 349183.1430, 2148.12222222222222), ( , , ), ..., ( , ,) ]

如何将所有数字转换为字符串,格式相同(科学记数法精确到8位小数),同时保持相同的结构(元组列表或列表列表)?

我认为我可以使用嵌套for循环来实现它,但有一种更简单的方法,例如以某种方式使用map吗?

5 个答案:

答案 0 :(得分:9)

假设您有一些列表列表或元组列表:

lst = [ [ 1,2,3 ], [ 1e6, 2e6, 3e6], [1e-6, 2e-6, 3e-6] ]

您可以使用列表理解创建并行列表列表:

str_list = [['{0:.8e}'.format(flt) for flt in sublist] for sublist in lst]

或者是元组列表:

str_list = [tuple('{0:.8e}'.format(flt) for flt in sublist) for sublist in lst]

然后,如果你想显示这组数字:

str_display = '\n'.join(' '.join(lst) for lst in strlist)
print str_display

答案 1 :(得分:4)

一种方式:

a = [ (2.3, 2.3123), (231.21, 332.12) ]
p = list()
for b in a:
    k = list()
    for c in b:
        k.append("{0:.2f}".format(c))
    p.append(tuple(k))
print p     

删除内循环:

p = list()
for b in a:
    p.append(tuple("{0:.2f}".format(c) for c in b))

删除外环:

p = [ tuple("{0:.2f}".format(c) for c in b) for b in a ]

打印p

"\n".join([ "\t".join(b) for b in p ])

答案 2 :(得分:3)

使用numpy你可以这样做:

>>> a=[[11.2345, 2.0, 3.0], [4.0, 5.0, 61234123412341234]]
>>> numpy.char.mod('%14.8E', a)

array([['1.12345000E+01', '2.00000000E+00', '3.00000000E+00'],
      ['4.00000000E+00', '5.00000000E+00', '6.12341234E+16']],
      dtype='|S14')

numpy字符串数组中的数据类型为S14,according to the documentation为14字节长度的字符串(S)。

答案 3 :(得分:0)

如果你真的想使用地图,你可以这样做:

map(lambda x: tuple(map(lambda y: '%08f' % y, x)), list)

但IMO,列表理解更容易阅读。

答案 4 :(得分:0)

一个方便的功能:

def stringify(listAll, sFormat):
    listReturn = []
    for xItem in listAll:
        if type(xItem) == float:
            xNewItem = sFormat.format(xItem)
            print(type(xNewItem))
            listReturn.append(xNewItem)
        else:
            xNewItem = str(xItem)
            print(type(xNewItem))
            listReturn.append(xNewItem)
    return listReturn

listAll = ['a', 3.1, 'b', 2.6, 4, 5, 'c']
listNew = stringify(listAll, '{0:.3}')
print(listNew)

在使用之前取出打印件等。我把它弄得有点冗长,这样你就可以看到它是如何工作的,然后自己收紧代码。