input = """Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in ante ipsum, in congue urna. Nulla dictum egestas lectus ac auctor. Mauris consequat adipiscing odio, sit amet mattis dolor viverra vitae. Donec convallis mollis metus sit amet cursus. Proin venenatis purus id turpis pharetra placerat fringilla magna blandit. Proin venenatis, tortor fermentum mattis gravida, nunc elit congue purus, et faucibus eros nulla ac ligula. Nulla et dignissim enim. Duis commodo molestie sapien, a facilisis massa porttitor quis. Morbi leo nulla, egestas volutpat suscipit non, porttitor blandit lectus. Nunc vitae nunc quis leo eleifend posuere vel a augue. Ut molestie elit ut lorem posuere adipiscing. Quisque et felis nec nibh blandit ullamcorper. Mauris feugiat pulvinar urna, et volutpat tellus gravida et. Nulla feugiat tincidunt quam, ac laoreet velit vestibulum ut. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer tincidunt risus id sapien fermentum a adipiscing ipsum fringilla. Sed accumsan arcu et purus malesuada et eleifend magna sodales. Proin dignissim pharetra justo sit amet condimentum. Aliquam justo urna, vestibulum eget fringilla non, aliquet nec lacus. Phasellus a enim non mauris venenatis varius. Mauris mattis, turpis vel cursus rutrum, lorem ante posuere lorem, eu posuere lectus velit placerat velit. In congue pretium viverra. """ # split into paragraphs paragraphs = input.split("\n\n") lastTop5 = [] p = 1 for paragraph in paragraphs: # count of chars/nums in paragraph charCounts = {} for c in [c for c in paragraph if c.isalnum()]: charCounts[c] = charCounts.setdefault(c, 0) + 1 # sort all character counts sortedChars = sorted(charCounts.items(), key=lambda(k,v):v) # filter out the last top 5 chars filteredChars = [c for c in sortedChars if c[0] not in lastTop5] # print top 10 print "Most used in paragraph #%d:" % p print map(lambda c: c[0], filteredChars[-10:]), "\n\n" # top 5 in paragraph lastTop5 = [c[0] for c in filteredChars[-5:]] p += 1