我有一个浮点数元组列表,例如
[ (1.00000001, 349183.1430, 2148.12222222222222), ( , , ), ..., ( , ,) ]
如何在保持相同结构(元组列表或列表列表)的同时,将所有数字转换为具有相同格式(具有 8 个小数点精度的科学记数法)的字符串?
我想我可以用嵌套的 for 循环来做到这一点,但是有没有更简单的方法,比如以map
某种方式使用?
我有一个浮点数元组列表,例如
[ (1.00000001, 349183.1430, 2148.12222222222222), ( , , ), ..., ( , ,) ]
如何在保持相同结构(元组列表或列表列表)的同时,将所有数字转换为具有相同格式(具有 8 个小数点精度的科学记数法)的字符串?
我想我可以用嵌套的 for 循环来做到这一点,但是有没有更简单的方法,比如以map
某种方式使用?
假设您有一些列表列表或元组列表:
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
单程:
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 ])
使用 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)。
一个方便的功能:
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)
在使用之前取出打印件等。我把它写得有点冗长,这样你就可以看到它是如何工作的,然后自己收紧代码。
如果你真的想使用地图,你可以这样做:
map(lambda x: tuple(map(lambda y: '%08f' % y, x)), list)
但是 IMO,列表理解更容易阅读。