在Python中找到浮点数的前两个非零数字?

时间:2019-12-27 16:01:31

标签: python python-3.x math

我想使用数学库获取浮点数的前两个非零数字。 例如

x = 1.27

答案应该是

12

x = 0.025

答案将是

25

我可以找到第一个和第二个非零数字:

a = str(x)
o1 = int(a.replace('0', '')[1])
o2 = int(a.replace('0', '')[2])

然后我可以连接它们,但是我得到

  

字符串索引超出范围

数字错误。

3 个答案:

答案 0 :(得分:2)

这是一种方法:

from itertools import islice

def first_n_nonzero_digits(l, n):
    return ''.join(islice((i for i in str(l) if i not in {'0', '.'}), n))

first_n_nonzero_digits(1.27, 2)
# '12'

first_n_nonzero_digits(0.025, 2)
# '25'

这里是一个没有任何导入并使用sorted的人:

def first_n_nonzero_digits_v2(l, n):
    return ''.join(sorted(str(x), key=lambda x: x in {'0', '.'}))[:2]

first_n_nonzero_digits_v2(1.27, 2)
# '12'

first_n_nonzero_digits_v2(0.025, 2)
# '25'

答案 1 :(得分:0)

这是一个简单的解决方案:

str(x).replace(".","").replace("0", "")[:2]

答案 2 :(得分:0)

尝试一下:

def nonzeroDigits(f,n=2):
    counter = 1
    s = str(f).replace(".","")
    for ndx,i in enumerate(s):
        if i == "0":
            counter = 1
            continue
        if counter >= n:
            return s[ndx - n + 1: ndx + 1]
        counter += 1
    raise ValueError("Doesn't have non-zero consecutive Digits")

在不使用任何第三方库的情况下,使它变得尽可能简单很累。

print(nonzeroDigits(1.27))
# print(nonzeroDigits(1.02)) # Raise ValueError Exception
print(nonzeroDigits(0.025))

返回:

12
25