Sorting / comparing version strings
- sort
- version
Various ways to compare or sort version strings, eg ["1.1.2", "1.0.0", "1.3.3", "1.0.12", "1.0.2"], into natural order.
A common error with two-part version strings of the form "1.3", "1.12" is to use a key function that converts them to floats; that won’t produce natural order.
Some of the linked answers use a key function like lambda s: [int(u) for u in s.split('.')]; some use StrictVersion from distutils.version; and some use a regex so they can handle alphanumeric versions.
Note that some answers are not suitable for Python 3 because they use lambda s: map(int, s.split('.')); map returns a list in Python 2 but in Python 3 it returns an iterator.
Also, some Python 2 answers use sort with a custom cmp function instead of a key function. That won’t work on Python 3, but the comparison functions may still be useful for simple comparisons. cmp functions can be converted to key functions using functools.cmp_to_key, although that’s a slow, ugly hack. :)
‘How to compare “version-style” strings’ has an answer by davidism.