1
0

natural_compare.py 478 B

12345678910111213141516171819
  1. import re
  2. from typing import Tuple
  3. from itertools import cycle
  4. __all__ = ["natural_comparison_key"]
  5. _re_digits = re.compile(r"(\d+)")
  6. def natural_comparison_key(key: str) -> Tuple:
  7. """Comparison key function for sorting strings by natural sort order.
  8. See: https://en.wikipedia.org/wiki/Natural_sort_order
  9. """
  10. return tuple(
  11. (int(part), part) if is_digit else part
  12. for part, is_digit in zip(_re_digits.split(key), cycle((False, True)))
  13. )