我有以下函数,我用它来查找二进制数中的位置长度,其中零被封装为:
def solution(N):
# write your code in Python 2.7
# convert to binary
binary = bin(N)[2:] # results prefixed with '0b'
# special case of no zeros
if '0' not in str(binary):
print('No binary gap in %s'% str(binary))
return 0
# special case of all zeros after first 1
if '1' not in str(binary)[1:]:
print('No binary gap in %s'% str(binary))
return 0
# special case of N == 1 = 01
if N == 1:
print('No binary gap in %s'% str(binary))
return 0
bgaps = []
sbin = str(binary)
print(sbin)
spbin = sbin.split('1')
print(spbin)
for i in spbin:
if i == '': continue
bgaps.append(len(i))
return max(bgaps)
for N in [6,328,147,15,2,483,647]:
print(solution(N)
结果表明,字符串拆分并不总是返回''
所在的分隔符。发生在例如for 101001000
,其中split返回
['', '0', '00', '000']
而不是
['', '0','', '00', '', '000']
我怀疑这与“#01; 01'”的特殊含义有关。但是分隔符是' 1'。关于为什么这种分裂表现如此的任何想法?
答案 0 :(得分:4)
您似乎误解了str.split
的工作原理。由于1
位于字符串的开头,因此空字符串出现在分割开头字符的左侧; str.split
将此问题纳入考虑范围:
>>> '1'.split('1')
['', '']
您似乎不想拆分。
你可能想要这样的东西:
>>> from itertools import groupby
>>> sbin = '101001000'
>>> ['' if k=='1' else ''.join(g) for k, g in groupby(sbin)]
['', '0', '', '00', '', '000']
答案 1 :(得分:2)
更新如果最后一个元素为1,则添加例外。
如何用“11”替换“1”,在。之间添加一个空格。
sbin = '10100100'
if sbin[-1] == "1":
print(sbin.replace("1","11").split("1")[1:-1]) # remove first and last
else:
print(sbin.replace("1","11").split("1")[1:]) # remove first
打印
['', '0', '', '00', '', '000']
答案 2 :(得分:2)
正如@ForceBru所提到的,split删除了分隔符,这在许多语言中都是相同的行为。您可能希望以不同的方式处理此问题(可能使用split + replace或类似的组合来计算间隙)。
希望能提供一些见解。