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

时间:2017-08-10 20:58:06

标签: python string

我有以下函数,我用它来查找二进制数中的位置长度,其中零被封装为:

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'。关于为什么这种分裂表现如此的任何想法?

3 个答案:

答案 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或类似的组合来计算间隙)。

希望能提供一些见解。