我有一个浮点数元组的列表,类似于
[ (1.00000001, 349183.1430, 2148.12222222222222), ( , , ), ..., ( , ,) ]
如何将所有数字转换为字符串,格式相同(科学记数法精确到8位小数),同时保持相同的结构(元组列表或列表列表)?
我认为我可以使用嵌套for循环来实现它,但有一种更简单的方法,例如以某种方式使用map
吗?
答案 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)
在使用之前取出打印件等。我把它弄得有点冗长,这样你就可以看到它是如何工作的,然后自己收紧代码。