2017-08-10 11 views
0

私はゼロがものによってカプセル化されている2進数で場所の長さを見つけるために使用される以下の機能があります。結果は文字列の分割が「doesnのことを示してPythonの基本的な文字列の分割方法のふるまい

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」です。なぜこの分割がこのように振る舞うかについての考えはありますか?

+1

これは2.7ではありません。 – Mangohero1

+1

'split'は、区切り文字' 'a、b、c" .split( '、')== ["a"、 "b"、 "c"] 'をスローします。 – ForceBru

答えて

2

更新追加の例外をどのように空のスペースを追加し、「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'] 
+0

興味深い解決策:-) – Shejo284

4

str.splitの仕組みを誤解しているようです。 1は文字列の先頭にあるため、開始文字の分割の左側に空の文字列が表示されます。 str.splitはconsdirationにこれを置く:あなたはスプリットにしたくないよう

>>> '1'.split('1') 
['', ''] 

が見えます。

はおそらく一種の何かしたい:最後の要素は、1

ある場合

>>> from itertools import groupby 
>>> sbin = '101001000' 
>>> ['' if k=='1' else ''.join(g) for k, g in groupby(sbin)] 
['', '0', '', '00', '', '000'] 
+0

私も 'groupby'を使って解決策を投稿しようとしていましたが、OPが宿題をしているように見えます。この場合、gropubyのようなものを使用するとおそらく不正行為とみなされます。多分手巻きのソリューションを提供するのでしょうか? –

+0

@ChristianDean私はそれを追加しました。なぜなら、彼らは大きな部分を「単独で」働かせることに何らかの努力を払っていたからです:) –

+0

申し訳ありません。公正な;-) –

2

@ForceBruに述べたように、分割は、言語の多くで同じ動作である区切り文字を除去します。おそらく、多分これにアプローチしたいと思うでしょう(おそらく、split + replaceのようなものや、ギャップを数えるための類似のものを使用して)。

いくつかの洞察を提供する希望。

関連する問題