循环遍历字符串以查找特定字符的第一个索引

时间:2017-01-25 01:31:32

标签: string python-2.7 indexing

for i in reversed(bin(n|(n+1))[2:]):#loops through representation of  
# integer n, converted to binary, and flips first 0 bit 
    if i == '0':
        print(str(count))
        count=0
        break
    count +=1

如果n是整数,则上面的示例代码翻转第一个零位,然后查找并打印第二个零位的索引。

我正在使用CodeFights,练习我的技能,似乎无法弄清楚如何格式化算法,基本完成了这个功能。

我应该找到合适的指数并在一行中将该能力提高2。我考虑过使用发电机和llambdas ......不知道该怎么做。

所以,具体来说,我怎么能得到     2 **整数n的第二个零的索引     #in一行代码?

1 个答案:

答案 0 :(得分:0)

def secondRightmostZeroBit(n):
    return 2**bin(n|(n+1))[::-1].index('0')

研究了几天,在这里询问后五分钟偶然发现了答案。 ' .replace(0,1,1)'和 ' .find(0)'也会很有用。

以上是我最终提交的内容。如问题n |(n = 1)中所解释的那样,用于在n的二进制表示中翻转最右边的零。从那里我颠倒了该结果的字符串/二进制表示的顺序,并使用了' .index'检索第一个' 0'被发现。

另一种方法与二进制数的操作有关,而不是我对原始问题的处理方式。

def secondRightmostZeroBit(n):
    return ~n & (~n-1) & -(~n & (~n-1))

我过去没有太多理由去做这种操作,所以当我解释这样的代码时,我总是在查看引用。 https://www.tutorialspoint.com/python/bitwise_operators_example.htm如果您想了解它,我建议为n插入一个特定的数字,转换为二进制,然后进行处理。做了几次,应该清楚发生了什么。你也可以将它的个性化插入你的交互式痛苦中,但除非你正在查看二进制文件,否则这对你没有多大帮助。 bin(n)和format(n," 8b")对此有好处。