2017-07-20 23 views
1

すべての連続した文字グループをグループ化してリストに入れる必要があります。私は、この文字列を持っている場合たとえば、:繰り返し文字列を分ける方法は?

1112221121 

を私は、リストにこれを分割したい:

['111', '222', '11', '2', '1']` 

別の例は

0011100000 

出力のようになります。['00', '111', '00000']

これは私が思い付いたものです:

In [146]: t = '0011100000' 
    ...: out = [] 
    ...: prev = None 
    ...: for c in t: 
    ...:  if c != prev: 
    ...:   prev = c 
    ...:   out.append('') 
    ...:  out[-1] += c 
    ...:  

In [147]: out 
Out[147]: ['00', '111', '00000'] 

もっと簡単なソリューションはありますか?私はこれを考えすぎていると思う。

+0

。それが私の必要なものです。 –

+0

@vaultah:正確なdupeを見つけることにおめでとう! –

+0

@ Jean-FrançoisFabreありがとうございます。 :) – vaultah

答えて

2

itertools.groupbyはまさにそれを行います。ありがとうメイト@vaultah

>>> from itertools import groupby 
>>> [''.join(g) for _, g in groupby('1112221121')] 
['111', '222', '11', '2', '1'] 
+0

これは、あなたによれば、dupeの正規表現のより簡単な代替ですか?私は何を使うべきか分からない。 –

+0

@cᴏʟᴅssimple単純な非正規表現のアプローチがある場合は、コードメンテナーの正規表現に関する専門知識と専門知識がより明確になるので、それらを好む傾向があります。 –

+0

groupbyはおそらくregexよりも高速でしょう。 –

関連する問題