python 如何以可读的方式指定大整数文字?

bq8i3lrv  于 2023-04-04  发布在  Python
关注(0)|答案(6)|浏览(152)

我想指定一个大整数序列(有许多零),如:

a = [1e13, 1e14, 1e19, ...]

我的直觉是使用科学记数法。但在python中,它是一个浮点数而不是整数。在python中有没有一种简单的方法来编写这些整数字面量而不写所有的零,因为确保零的数量正确是一场噩梦。
我相信我可以使用int将浮点数转换回整数,但只是想知道是否有更好的方法?

mnemlml8

mnemlml81#

为了未来的观众。
因为Python 3.6 PEP 515将被包含。
所以你可以使用a = 1_000_000_000_000来提高代码的可读性。

bxpogfeg

bxpogfeg2#

使用***,它并不漂亮,但能给你正确的结果。

print(2e10)
20000000000.0

print(2*10**10)
20000000000

你也可以像这样生成一个完整的列表:

result = []
for i in range(5):
    result.append(1*10**i)

>>> result
[1, 10, 100, 1000, 10000]

如果你真的想用科学记数法,那么

result = []
for n in range(5):
    result.append(int(float(f"1e{n}"))) #converting to int directly gives: ValueError: invalid literal for int() with base 10: '1e0'


>>> result
[1, 10, 100, 1000, 10000]
yzuktlbb

yzuktlbb3#

input中,可以指定带下划线的整数。
从python 3.10开始,还可以使用pprint库方法,比如pprint.pprintpprint.pformat搭配underscore_numbers=True输出带下划线的整数。这对非整数没有影响。
示例:

from pprint import pformat

nums = [1000000, 1_000_000, 1e6, 1000000.1]
for num in nums:
    print(num, pformat(num), pformat(num, underscore_numbers=True))

# 1000000 1000000 1_000_000
# 1000000 1000000 1_000_000
# 1000000.0 1000000.0 1000000.0
# 1000000.1 1000000.1 1000000.1

另见:

python human readable large numbers

pcww981p

pcww981p4#

你可以设置一些后缀

K=1000
M=K*K
G=K*M
T=K*G
P=K*T
E=K*P
print 12*P

或使用较长的名称(kilo等)。

jvidinwx

jvidinwx5#

你可以使用逗号分隔符来表示千位数,作为一个字符串,然后转换为一个int。

import locale
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') 
def bigint(s):
    return locale.atoi(s)

print bigint('1,000,000,000,000')
jrcvhitl

jrcvhitl6#

你可以做这样的事情,这避免了浮点数到int的转换问题,在我看来是相当可读的:

a = map(int, ['1'+'0'*13, '1'+'0'*14, '1'+'0'*19, '1'+'0'*23])
for value in a:
    print(format(value, ','))

输出:

10,000,000,000,000
100,000,000,000,000
10,000,000,000,000,000,000
100,000,000,000,000,000,000,000

相关问题