有效删除除重复结束字符外的所有内容

时间:2019-03-04 21:29:04

标签: python strip

有什么有效的方法可以将重复的结束字符保留为给定的数字? (如反转条)(我找不到快速方法)

例如 number='184950273400000' print((number).strip('0')) 结果是1849502734

但是我想知道如何去除0之前的所有内容,而不是去除0。结果是00000。

在这种情况下,len(number) == 5

我想知道是否存在像反转条这样的东西,因为我试图找到重复的结束号的长度。

5 个答案:

答案 0 :(得分:2)

您可以使用reversed函数以相反的顺序高效地生成字符串作为序列,以便您可以使用itertools.takewhile仅输出等于'0'的前导字符'0'的均等方法,然后连接字符以输出:

from itertools import takewhile
''.join(takewhile('0'.__eq__, reversed(number)))

这避免了迭代字符串的任何(可能很长)导致尾随零的部分。

答案 1 :(得分:1)

这是性能选项。只需要扫描最后几位。

def count_zeros(number):

    number=str(number)
    i=0
    for digit in reversed(number): #count backwards
        if digit!=number[-1]:
            return i
        else:
            i+=1

答案 2 :(得分:0)

您可以使用正则表达式:

import re

number='184950273400000'

re.search(r'0+$', number).group(0)
# 00000

您还可以将函数takewhile()与反向字符串一起使用:

from itertools import takewhile

''.join(takewhile(lambda x: x == '0', number[::-1]))
# 00000

最后,您可以使用剥离的字符串的长度:

number[len(number.rstrip('0')):]
# 00000

答案 3 :(得分:0)

如果要查找注释建议的阶乘的尾随零数,则可能并非总是可以使用建议的其他方法来计算阶乘。相反,您只需要计算数字中包含的5的因数。如果已经提供了数字,这不会比其他方法快,但比计算阶乘快得多。

def count_zero(n):
    return sum([n//5**(i+1) for i in range(int(math.log(n, 5)))])

答案 4 :(得分:0)

如果要从字符串处理它(而不是数学方法),则仅使用迭代器可能会获得最佳性能:

from itertools import takewhile
countTrailingZeroes = sum( 1 for _ in takewhile(lambda c:c=="0",reversed(number)) )
相关问题