我有这个字符串:11000000101010000000010000000000
我想0
从后面开始计算 s 直到我撞到1
那里并停下来,确定最后的 s 总数0
。在这种特殊情况下,它会给我10
一个答案。
非常感谢任何帮助。
我有这个字符串:11000000101010000000010000000000
我想0
从后面开始计算 s 直到我撞到1
那里并停下来,确定最后的 s 总数0
。在这种特殊情况下,它会给我10
一个答案。
非常感谢任何帮助。
您可以使用rindex()
获取最后一个索引,1
然后从最大索引 ( len(s) - 1
) 中减去该索引:
>>> s = '11000000101010000000010000000000'
>>> len(s) - s.rindex('1') - 1
10
>>> s = '11000000101010000000010000000000'
>>> len(s.rsplit('1', 1)[-1])
10
这是如何在正则表达式中做到这一点,因为为什么不呢!
>>> s = '11000000101010000000010000000000'
>>> match = re.search('0*$', s)
>>> match.end() - match.start()
10
我知道这个问题已经回答了,但我想我会添加另一种方法来做到这一点。
您可以itertools.takewhile
在字符串的反面使用,并且takewhile
数字不是“1”。将总和应用于生成的所有 1,您就会得到答案。
>>> test = "11000000101010000000010000000000"
>>> sum(1 for x in takewhile(lambda i: i != '1', test[::-1]))
10
您可以:
对相应的整数执行连续除以 10,就好像它是以 10 为基数一样。
使用字符串操作找到最后一个 1 并在它之后取所有东西
使用正则表达式获取末尾的 0 并计算它们
寻找转换为二进制的操作并执行连续除以二。
binary_str = "11000000101010000000010000000000"
import re
match_obj = re.search(r"0*$", binary_str)
if match_obj:
print len(match_obj.group())