Вы можете использовать itertools.groupby
для эффективной итерации по этим группам, а затем накапливать результаты в новом списке, либо присоединяя и добавляя, либо расширяя группу .... Итак:
>>> from itertools import groupby
>>> n = ['u', '<', '=', 'd', 'd', '<', '<', 'f']
>>> new_n = []
>>> for is_letter, group in groupby(n, str.isalpha):
... if not is_letter:
... new_n.append(''.join(group))
... else:
... new_n.extend(group)
...
>>> new_n
['u', '<=', 'd', 'd', '<<', 'f']
И просточтобы уточнить, что делает itertools.groupby
:
>>> [(k, list(g)) for k,g in groupby(n, str.isalpha)]
[(True, ['u']), (False, ['<', '=']), (True, ['d', 'd']), (False, ['<', '<']), (True, ['f'])]
Приятно то, что это делает один проход по списку (дает вам линейную сложность по времени) и должно быть настолько эффективным, насколько вы можете надеяться с точки зрениягруппировка, потому что itertools
реализовано в C.