2016-10-04 5 views
0

文字列の中で最も長い空白を見つける必要があります。何が間違っているのか分かりません。文字列内の空白の最大長を見つけるのに問題がある

def check1(x): 
    cc =() 
    for i in x: 
     if i != " ": 
      lis.append(cc) 
      cc=0 
     else: 
      cc +=1 
      new.append(cc) 
      print(cc) 

私は何が間違っているのか分かりませんが、それは追加リストに追加されません。

+0

なぜcc =()ですか? – Moondra

答えて

2

使用regex ESおよび組み込みmax

import re 
max_len = max(map(len, re.findall(' +', sentence))) 

re.findall(' +', sentence)は、一つ以上の空白のすべての出現を検索します。

map(len, ...)は、この配列を対応する文字列長の配列に変換します。

max(...)は、これらの文字列長のうち最も高い値を取得します。

+1

'max(re.findall( '\ s +'、sentence)、key = len)'おそらくもっと良いでしょう。 – TigerhawkT3

+0

@ TigerhawkT3これは、最も長い文字列(キーとして 'len'でソートされています)を返して、スペース(タブなどを除く)だけを必要としていたと仮定しましたので、' len(max(re.findall )、key = len)) ' – Uriel

+1

はい。これは、問題の空白のストレッチを取得しながら、同時に不必要な関数呼び出しを取り除くことを可能にするという考え方です。 – TigerhawkT3

1

あなたは、単純なitertools.groupbyを使用することができます。

>>> from itertools import groupby 
>>> s = 'foo  bar  baz   lalala' 
>>> max(len(list(v)) for is_sp, v in groupby(s, str.isspace) if is_sp) 
10 

GROUPBYは空白の連続した実行(is_sp == True)と非空白の連続で実行(is_sp == False)を見つけるでしょう。私たちの場合、空白の実行だけを気にするので、空白以外の場合をフィルタリングしてから、連続した実行の長さを取得します。最後に残されているのは、すべての長さの中で最大のものを選ぶことだけです。