3 ms·
Python is relatively short, batteries included and all that: import re import sys import collections words = re.findall('[a-z]+', sys.stdin.read().l
by mkl 8y ago
Python is relatively short, batteries included and all that:
import re
import sys
import collections
words = re.findall('[a-z]+', sys.stdin.read().lower())
c = collections.Counter(words)
for word, count in c.most_common(int(sys.argv[1])):
print(f'{count:>7} {word}')
Three times the character count of the Unix pipe version, but IMHO a lot more readable (and generalisable).
- mkesper 8y agoYou don't want to read all input into memory first.
- mkl 8y agoFair enough. import re import sys import collections c = collections.Counter() for line in sys.stdin: words = re.findall('[a-z]+', line.lower()) c.update(words) for word, count in c.most_common(int(sys.argv[1])): print(f'{count:>7} {word}')