From 6a20de05e8cdaf8c65bbdc74527c45ba1e915ab9 Mon Sep 17 00:00:00 2001 From: Mayank Raj Date: Tue, 27 Oct 2026 16:44:31 +0530 Subject: [PATCH] Fix natural_sort key comparison bug by normalizing numeric/text tokens to comparable tuples and add regression doctest --- sorts/natural_sort.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/sorts/natural_sort.py b/sorts/natural_sort.py index 001ff2cf5b41..9c659fb7120e 100644 --- a/sorts/natural_sort.py +++ b/sorts/natural_sort.py @@ -22,10 +22,17 @@ def natural_sort(input_list: list[str]) -> list[str]: ['Elm11', 'Elm12', 'Elm2', 'elm0', 'elm1', 'elm10', 'elm13', 'elm9'] >>> natural_sort(example2) ['elm0', 'elm1', 'Elm2', 'elm9', 'elm10', 'Elm11', 'Elm12', 'elm13'] + + >>> natural_sort(['a2', 'aB', 'a10']) + ['a2', 'a10', 'aB'] """ - def alphanum_key(key): - return [int(s) if s.isdigit() else s.lower() for s in re.split("([0-9]+)", key)] + def alphanum_key(key: str): + return [ + (0, int(part)) if part.isdigit() else (1, part.lower()) + for part in re.split(r"(\d+)", key) + if part + ] return sorted(input_list, key=alphanum_key)