1

我有这个字符串:11000000101010000000010000000000

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

非常感谢任何帮助。

4

6 回答 6

6

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

>>> s = '11000000101010000000010000000000'
>>> len(s) - s.rindex('1') - 1
10
于 2013-09-24T22:47:32.707 回答
5

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

>>> s = '11000000101010000000010000000000'
>>> len(s.rsplit('1', 1)[-1])
10
于 2013-09-24T22:46:57.277 回答
2

这是如何在正则表达式中做到这一点,因为为什么不呢!

>>> s = '11000000101010000000010000000000'
>>> match = re.search('0*$', s)
>>> match.end() - match.start()
10
于 2013-09-25T01:35:16.120 回答
1

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

您可以itertools.takewhile在字符串的反面使用,并且takewhile数字不是“1”。将总和应用于生成的所有 1,您就会得到答案。

>>> test = "11000000101010000000010000000000"
>>> sum(1 for x in takewhile(lambda i: i != '1', test[::-1]))
10
于 2013-09-24T23:34:32.500 回答
0

您可以:

  • 对相应的整数执行连续除以 10,就好像它是以 10 为基数一样。

  • 使用字符串操作找到最后一个 1 并在它之后取所有东西

  • 使用正则表达式获取末尾的 0 并计算它们

  • 寻找转换为二进制的操作并执行连续除以二。

于 2013-09-24T22:50:19.867 回答
0
binary_str = "11000000101010000000010000000000"

import re

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

if match_obj:
    print len(match_obj.group())
于 2013-09-26T18:17:19.043 回答