Python中整数列表的科学计数法

4
我有一个整数列表,我将其用作图表上的标签,并需要用科学计数法表示它们。我看到的大多数其他问题都涉及浮点值,例如23.16274586938,但我的数字范围从2600000000到2900000000,需要将它们表示为2.61e^8或其他值。我已经尝试使用Decimal,{.2E},但它们都不适用于我。该列表中大约有50000个值,每个值约有12位数字。
在网上找到的解决方案仅适用于单个值,而不是在列表上迭代时使用。
我的列表如下:
x = [5160000000000,63720000000000,326723000000000,3400000000000,...],共有50k个值
"{:.2e}".format(arr_of_frequencies[i])

使用这个方法,其中 arr_of_frequencies 是我的列表,或某些变体会导致错误。
IndexError: cannot fit 'int' into an index-sized integer

这将取决于您使用的图形库(您尚未告诉我们)。 - 0x5453
1
Chart JS 用于绘制图表,Flask 用于接收输入。 - user15804083
1个回答

10

您可以使用str.format()将数字以科学计数法打印出来。

在带有""{:e}"的字符串上使用str.format(),以将数字格式化为科学计数法。

1

要在小数点后只包含一定数量的数字,请使用"{:.Ne}",其中N是所需的数字数量。

2

您可以进一步了解有关格式化的信息在这里

例如:

>>> "{:e}".format(1234566723425254342)
>>> '1.234567e+18'

>>> "{:.4e}".format(123456672342525434234232)
>>> '1.2346e+23'

对于非常大的列表,您可以尝试使用生成器进行转换,并采用惰性求值的方式处理:
>>> data = open("data.txt", 'r').read()
>>> def reverse(data):
...     for index in range(len(data)):
...             yield "{e}".format(data[index])
...
>>>
>>> for x in reverse(data):
...     print(x)

3.400000e+12
5.160000e+12
6.372000e+13
3.267230e+14
3.400000e+12
5.160000e+12
6.372000e+13
5.160000e+12
6.372000e+13
3.267230e+14
3.400000e+12
5.160000e+12
6.372000e+13
3.267230e+14
3.400000e+12
5.160000e+12
5.160000e+12
6.372000e+13
3.267230e+14
3.400000e+12
5.160000e+12
6.372000e+13
5.160000e+12
6.372000e+13
3.267230e+14
3.400000e+12
5.160000e+12
6.372000e+13
3.267230e+14
3.400000e+12
5.160000e+12
6.372000e+13
.......50000 entries worked

4
好的。您能否提供代码文本,而不是图像? - trincot
我尝试了超过20位数的数字,它可以工作。你使用的是哪个版本的Python? - Pratap Alok Raj
我更新了以展示我的列表是什么样子的。为了格式化它们,将 50,000 个值写入本地文件并读取它们似乎非常落后和不必要。这样做也会大大减慢我的程序。 - user15804083
我尝试了惰性求值(使用生成器),对我很有效(我采用了5000的数据大小)。你能否也试一下,然后告诉我这是否对你有效。我会将它添加到答案中。 - Pratap Alok Raj
我刚刚尝试了将近68k条20位数字记录,它的表现非常出色 :) - Pratap Alok Raj
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接