4

我有一个浮点数元组列表,例如

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

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

我想我可以用嵌套的 for 循环来做到这一点,但是有没有更简单的方法,比如以map某种方式使用?

4

5 回答 5

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
于 2013-04-21T04:13:26.410 回答
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 ])
于 2013-04-21T04:10:36.127 回答
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,根据文档,它是一个 14 字节长度的字符串 (S)。

于 2013-04-21T04:14:53.427 回答
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)

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

于 2014-06-15T13:41:47.740 回答
0

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

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

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

于 2013-04-21T04:41:45.807 回答