[英]Faster way to shift a decimal in Python to remove zeros?
我有各種各樣的數字,總是以0和1為界。這些數字的范圍是值,例如
.9, .08, .00024, .00000507
我的目標是將這些數字轉換為以下數字
.9, .8, .24, .507
也就是說,我想刪除小數點后的任何零。
我有以下代碼來執行此操作。 有沒有辦法在性能方面更快地做到這一點?
import math
x=.009
n = int(-math.log10(x))
x *= math.pow(10, n)
更快的方法(使用更大的數字變得更快):
def method2(x):
while x < 0.1:
x *= 10
return x
甚至更快:
def method3(x):
while x < 0.01:
x *= 100
while x < 0.1:
x *= 10
return x
這樣做的有趣方法(慢於問題):
def remove_zeros(a):
return float("0." + str(long(str(1+a)[2:])))
這不完全是您的預期輸出,但您可以使用它。
如果將數字存儲為小數,則可以將它們格式化為科學計數法並丟棄除基數之外的所有內容。
>>> from decimal import Decimal
>>> numbers = ['.9', '.08', '.00024', '.00000507']
>>> decimals = [Decimal(n) for n in numbers]
>>> [format(d, '.2E')[:4] for d in decimals]
['9.00', '8.00', '2.40', '5.07']
我在這里將它們顯示為字符串格式,因為它更精確地以這種方式實例化Decimal,因為它避開了浮點問題。 如果您從數字作為浮動列表開始,則在第三步中獲得:
[Decimal('0.90000000000000002220446049250313080847263336181640625'), Decimal('0.08000000000000000166533453693773481063544750213623046875'), Decimal('0.00024000000000000000608020578329870886591379530727863311767578125'), Decimal('0.0000050699999999999997388091914352070688210005755536258220672607421875')]
在這種情況下,它會給你相同的答案,但可能並不總是如此。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.