在没有e或E的情况下格式化指数

时间:2017-06-27 15:05:34

标签: python

我有以下类型的列表:list = [1, 3, 4.23123e-07]

我想将此列表写入文本文件。我希望文件看起来如下:

1 
3
4.231-7

对于指数项,我希望能够摆脱指数本身的e和任何前面的零,从4.23123e-074.231-7

除了循环遍历我的列表并放入字符串4.231-7代替整数4.23123e-07之外,有没有办法做到这一点?

2 个答案:

答案 0 :(得分:4)

您可以从字符串中删除任何e以及+-之后的任何零:

import re
values = [1, 3, 4.23123e-07]

def format_without_e(number):
  no_e = re.sub('e', '', str(number), re.IGNORECASE)
  return re.sub('(?<=[+-])0+', '', no_e)

formatted_numbers = [format_without_e(value) for value in values]

print(formatted_numbers)
# ['1', '3', '4.23123-7']

print("\n".join(formatted_numbers))
# 1
# 3
# 4.23123-7

答案 1 :(得分:1)

使用%g进行精确控制,并使用re进行简化。感谢@MadPhysicist纠正错误。

import re

[re.sub('e([-+])?[0]*',r"\1", '%.4g'%s) for s in l]

例如

In [46]: l = [1, 3, 4.23123e-07]

In [47]: [re.sub('e([-+])?[0]*',r"\1", '%.4g'%s) for s in l]
Out[47]: ['1', '3', '4.231-7']