Каой же Вы дотошный (в хорошом смысле).
def aon(s): return reduce(lambda x,y: x+x[-1] if y=='#' else x+y, ['#']+[s[i] for i in xrange(len(s)-1) if s[i]==s[i+1] and (s[i]!=s[i-1] or i==0)]).strip('#')
def aon(s): return reduce(lambda x,y: x+x[-1] if y=='#' else x+y, ['#']+[s[i] for i in xrange(len(s)-1) if s[i]==s[i+1] and (s[i]!=s[i-1] or i==0)]).strip('#')
def dec_aon_num(s): result = '' was_written = False for i in range(len(s) - 1): if s[i] == s[i + 1]: if was_written == False: if s[i] == '#': result += result[-1:] else: result += s[i] was_written = True else: was_written = False return result