python 有效数字_在python中获取最有效数字

我使用python 3.6.1进行了一些计时:from timeit import timeit

from math import *

lst = list(range(1, 10_000_000))

# 3.6043569352230804 seconds

def most_significant_str(i):

return int(str(i)[0])

# 3.7258850016013865 seconds

def most_significant_while_floordiv(i):

while i >= 10:

i //= 10

return i

# 4.515933519736952 seconds

def most_significant_times_floordiv(i):

n = 10

while i > n:

n *= 10

return i // (n//10)

# 4.661690454738387 seconds

def most_significant_log10_floordiv(i):

return i // (10 ** (log10(i) // 1))

# 4.961193803243334 seconds

def most_significant_int_log(i):

return i // (10 ** int(log10(i)))

# 5.722346990002692 seconds

def most_significant_floor_log10(i):

return i // (10 ** floor(log10(i)))

for f in (

'most_significant_str',

'most_significant_while_floordiv',

'most_significant_times_floordiv',

'most_significant_log10_floordiv',

'most_significant_int_log',

'most_significant_floor_log10',

):

print(

f,

timeit(

f"""

for i in lst:

{f}(i)

""",

globals=globals(),

number=1,

),

)

如您所见,对于range(1, 10_000_000)中的数字,int(str(i)[0])比其他方法更快。最接近我的方法是使用一个简单的while循环:

^{pr2}$

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值