количество пробелов между каждым словом - PullRequest
1 голос
/ 14 января 2012

Как найти быстрый способ подсчитать количество интервалов между каждым словом в тексте?

Каждый пробел представляет значение,

Пример: один пробел - это буква «a», два пробела - это буква «b» и т. Д.

Пример с текстом

текст:

hello all  the   world 

один пробел между hello и all -> 'a', два пробела между all и -> 'b', ...

слово -> 'abc'

Ответы [ 4 ]

3 голосов
/ 14 января 2012

Для развлечения - и потому что мне не нравятся регулярные выражения, но мне нравится модуль itertools, - еще один способ сделать это - знать, что вы можете использовать itertools.groupby для сбора объектов типа:

>>> from string import lowercase
>>> from itertools import groupby
>>> 
>>> s = 'hello all  the   world'
>>> counts = [(len(list(cpart))) for c,cpart in groupby(s) if c == ' ']
>>> counts
[1, 2, 3]
>>> values = [lowercase[count-1] for count in counts]
>>> values
['a', 'b', 'c']
>>> vs = ''.join(values)
>>> vs
'abc'

itertools.groupby часто очень полезен.

3 голосов
/ 14 января 2012
import re
import string

''.join(map(lambda x: string.lowercase[len(x) - 1], re.findall(r'\s+', 'hello all  the   world')))
# 'abc'
0 голосов
/ 14 января 2012

Если вы укажете желаемый формат вывода, я мог бы сделать это более конкретным, но это поможет вам на пути к полному решению.

import re

word_re = re.compile('(\W*)(\w+)'):

for match in word_re.finditer(text)
    spaces, word = match.groups()
    print len(spaces), word

Примечание: \w стоитдля "символов слова" и \ W является противоположностью.В зависимости от вашей конкретной проблемы, вы можете сделать их более конкретными.

Ссылка: http://docs.python.org/library/re.html#regular-expression-syntax

0 голосов
/ 14 января 2012

При условии, что я вас правильно понял:

from string import lowercase

word = lowercase[:text.count(' ')]
...