Der reguläre Ausdruck ist übrigens trotzdem fast doppelt so schnell (Rechner ist schon etwas älter):
Code: Alles auswählen
In [3]: %paste
from itertools import groupby
import re
def get_words_groupby(text):
return [''.join(letters) for is_word, letters
in groupby(text, str.isalpha) if is_word]
def get_words_re(text):
return re.findall('[a-zA-Z]+', text)
def test():
lines = ['Hallo, na du wie gehts\n', 'Hallo na\n', 'na wie Wochenende\n']
for line in lines:
words = get_words_groupby(line)
assert words == get_words_re(line)
print(words)
if __name__ == '__main__':
test()
## -- End pasted text --
['Hallo', 'na', 'du', 'wie', 'gehts']
['Hallo', 'na']
['na', 'wie', 'Wochenende']
In [4]: %timeit get_words_groupby('Hallo, na du wie gehts\n')
26.5 µs ± 1.5 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [5]: %timeit get_words_re('Hallo, na du wie gehts\n')
14 µs ± 409 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)