2014-08-28 4 views
0

У меня есть входной строки, какSplit если два последовательных символов, не то же самое

a = '4433555555666666' 

я хочу значения должны быть разделены, если последний символ не является такой же, как следующий.

в этом случае:

44, 33, 555555, 666666 

Я новичок в Python, так что не знаю, как бороться с ним. Я попытался, но он просто дает первый правильный, то есть

['44', '', '555555666666'] 

Также, если две последовательные группы символов одинаковы. т.е. а = 'chchdfch' то 'ч' следует заменить а = '** ДФ *

+0

Я могу сгруппировать их с помощью шага = 2, если есть что-то вроде 'string =" 4545558545 ", а затем заменить каждый 45 на 'a', который должен выглядеть как' string = "aa5585a" ' –

ответ

3

Вы можете использовать itertools.groupby()

[''.join(v) for k, v in itertools.groupby(a)] 

Демо:

>>> import itertools 
>>> a = '4433555555666666' 
>>> [''.join(value) for key, value in itertools.groupby(a)] 
['44', '33', '555555', '666666'] 

Таким образом, этот код называется list comprehension - компактный способ итерации по отдельным элементам.

Другой способ представления это:

>>> for k, v in itertools.groupby(a): 
... print k, v 
... 
4 <itertools._grouper object at 0x100b90710> 
3 <itertools._grouper object at 0x100b90750> 
5 <itertools._grouper object at 0x100b90710> 
6 <itertools._grouper object at 0x100b90750> 
>>> for k, v in itertools.groupby(a): 
... print k, "".join(v) 
... 
4 44 
3 33 
5 555555 
6 666666 
>>> 

Просто игнорировать k итератора генерирует.

+0

thnx это сработало для меня , но я не знаю, что происходит. можете ли вы объяснить код или какой-либо более простой способ для него? также я хочу сохранить максимальную длину группы == 3 –

+0

Теперь я попытался расширить конструкцию цикла для лучшего понимания. Я дам вам понять максимальную длину предложения группы, потому что он очень прямолинейный. Если вы застряли слишком долго, дайте мне знать. – karthikr

+0

thnk вы для объяснения. да, я могу определить максимальную длину. Ты еще раз. :) –

Смежные вопросы