我想指定一个大整数序列(有许多零),如:
a = [1e13, 1e14, 1e19, ...]
我的直觉是使用科学符号。但在python中,它是浮点数而不是整数。在python中是否有一种简单的方法来编写这些整数字面值而不写所有的零,因为确保零的数量正确是一场噩梦。
我相信我可以使用int
将浮点数转换回整数,但只是想知道是否有更好的方法?
供将来观看
因为python 3.6 PEP 515
将包含在内。
所以你可以用a = 1_000_000_000_000
来提高代码的可读性
使用*
和**
,它不漂亮,但给你正确的结果。
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]
在输入中,您可以指定带有下划线的整数。
从python 3.10开始,您还可以使用pprint
库方法,例如pprint.pprint
和pprint.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人类可读的大数
可以设置一些后缀
K=1000
M=K*K
G=K*M
T=K*G
P=K*T
E=K*P
print 12*P
或使用较长的名称(kilo等)
您可以使用逗号分隔符,作为字符串,然后转换为整型。
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')
您可以这样做,这样可以避免float到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