Python基本字符串拆分方法行为

Python基本字符串拆分方法行为,python,string,Python,String,我有一个函数,我用它来计算二进制数中零被1封装的位置的长度: 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))

我有一个函数,我用它来计算二进制数中零被1封装的位置的长度:

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)
结果表明,字符串拆分并不总是返回分隔符原来所在的位置。例如,对于101001000,当拆分返回时会发生

['', '0', '00', '000']
而不是

['', '0','', '00', '', '000']

我怀疑这与“01”的特殊含义有关,但分隔符是“1”。你有没有想过为什么这个拆分会这样做?

你似乎误解了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,则更新添加的异常

把1换成11怎么样?在1和11之间加一个空格

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']

正如@ForceBru提到的,split删除了分隔符,这在许多语言中都是相同的行为。您可能希望以不同的方式处理此问题,可能需要结合使用拆分+替换或类似的方法来计算间隙


希望这能提供一些见解。

这不是2.7split扔掉了分隔符:a,b,c.split','=[a,b,c]。我也打算向groupby发布一个解决方案,但看起来OP好像在做作业,在这种情况下,使用gropuby之类的东西可能会被视为作弊。也许还可以提供一个手推的解决方案?@ChristianDean I补充说,由于他们在“单独”处理更大的部分方面表现出了一些努力:@Moses Koledoye感谢这一澄清。这个问题不仅仅是通过Codibility和Geeksforgeks网站学习python的家庭作业。一个有趣的解决方案:-