如何计算二进制字符串中的结尾0

时间:2013-09-24 22:45:23

标签: python python-2.7

我有这个字符串:11000000101010000000010000000000

我想从后面开始计算0,直到我点击1并停在那里,确定最后0的总数。在这种特殊情况下,它会给我10作为答案。

非常感谢任何帮助。

6 个答案:

答案 0 :(得分:6)

您可以使用rindex()获取上一个1的索引,然后从最大索引(len(s) - 1)中减去该索引:

>>> s = '11000000101010000000010000000000'
>>> len(s) - s.rindex('1') - 1
10

答案 1 :(得分:5)

使用str.rsplit()str.count()

>>> s = '11000000101010000000010000000000'
>>> len(s.rsplit('1', 1)[-1])
10

答案 2 :(得分:2)

以下是如何在正则表达式中执行此操作,因为为什么不呢!

>>> s = '11000000101010000000010000000000'
>>> match = re.search('0*$', s)
>>> match.end() - match.start()
10

答案 3 :(得分:1)

我知道问题已经回答,但我想我会添加另一种方法,你可以做到这一点。

您可以在字符串的反面使用itertools.takewhiletakewhile数字不是'1'。对所有生成的1应用一笔金额,然后得到答案。

>>> test = "11000000101010000000010000000000"
>>> sum(1 for x in takewhile(lambda i: i != '1', test[::-1]))
10

答案 4 :(得分:0)

你可以:

  • 在相应的整数上执行10次连续除法,就像它在基数10中一样。

  • 使用字符串操作查找最后的1并记录其后的所有内容

  • 使用正则表达式在结尾处获取0并计算它们

  • 查找转换为二进制的操作,并执行两次连续分割。

答案 5 :(得分:0)

binary_str = "11000000101010000000010000000000"

import re

match_obj = re.search(r"0*$", binary_str)

if match_obj:
    print len(match_obj.group())