有什么有效的方法可以将重复的结束字符保留为给定的数字? (如反转条)(我找不到快速方法)
例如
number='184950273400000'
print((number).strip('0'))
结果是1849502734
但是我想知道如何去除0之前的所有内容,而不是去除0。结果是00000。
在这种情况下,len(number)
== 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)) )