我有以下类型的列表:list = [1, 3, 4.23123e-07]
我想将此列表写入文本文件。我希望文件看起来如下:
1
3
4.231-7
对于指数项,我希望能够摆脱指数本身的e
和任何前面的零,从4.23123e-07
到4.231-7
。
除了循环遍历我的列表并放入字符串4.231-7
代替整数4.23123e-07
之外,有没有办法做到这一点?
答案 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']