import re
def mykey(s):
lst = re.findall(r'(\d+)|(\D+)', s)
return [(0,a.lower()) if a else (1,int(n)) for n, a in lst]\
+ [a for n, a in lst if a]\
+ [len(n) for n, a in lst if n]
test_cases = [
# (unsorted list, sorted list)
(list('bca'), ['a', 'b', 'c']),
(list('CbA'), ['A', 'b', 'C']),
(list('r0B9a'), ['a', 'B', 'r', '0', '9']),
(['a2', '1a', '10a', 'a1', 'a100'], ['a1', 'a2', 'a100', '1a', '10a']),
(['GAM', 'alp2', 'ALP11', '1', 'alp100', 'alp10', '100', 'alp1', '2'],
['alp1', 'alp2', 'alp10', 'ALP11', 'alp100', 'GAM', '1', '2', '100']),
(list('ra0b9A'), ['A', 'a', 'b', 'r', '0', '9']),
(['Abc', 'abc', 'ABc'], ['ABc', 'Abc', 'abc']),
(['0A', '00a', 'a', 'A', 'A0', '00A', '0', 'a0', '00', '0a'],
['A', 'a', 'A0', 'a0', '0', '00', '0A', '00A', '0a', '00a'])
]
for case in test_cases:
print(case[1])
print(sorted(case[0], key=mykey))
aW1wb3J0IHJlCgpkZWYgbXlrZXkocyk6CiAgICBsc3QgPSByZS5maW5kYWxsKHInKFxkKyl8KFxEKyknLCBzKQogICAgcmV0dXJuIFsoMCxhLmxvd2VyKCkpIGlmIGEgZWxzZSAoMSxpbnQobikpIGZvciBuLCBhIGluIGxzdF1cCiAgICAgICAgKyBbYSBmb3IgbiwgYSBpbiBsc3QgaWYgYV1cCiAgICAgICAgKyBbbGVuKG4pIGZvciBuLCBhIGluIGxzdCBpZiBuXQoKdGVzdF9jYXNlcyA9IFsKICAgICMgKHVuc29ydGVkIGxpc3QsIHNvcnRlZCBsaXN0KQogICAgKGxpc3QoJ2JjYScpLCBbJ2EnLCAnYicsICdjJ10pLAogICAgKGxpc3QoJ0NiQScpLCBbJ0EnLCAnYicsICdDJ10pLAogICAgKGxpc3QoJ3IwQjlhJyksIFsnYScsICdCJywgJ3InLCAnMCcsICc5J10pLAogICAgKFsnYTInLCAnMWEnLCAnMTBhJywgJ2ExJywgJ2ExMDAnXSwgWydhMScsICdhMicsICdhMTAwJywgJzFhJywgJzEwYSddKSwKICAgIChbJ0dBTScsICdhbHAyJywgJ0FMUDExJywgJzEnLCAnYWxwMTAwJywgJ2FscDEwJywgJzEwMCcsICdhbHAxJywgJzInXSwKICAgICAgICBbJ2FscDEnLCAnYWxwMicsICdhbHAxMCcsICdBTFAxMScsICdhbHAxMDAnLCAnR0FNJywgJzEnLCAnMicsICcxMDAnXSksCiAgICAobGlzdCgncmEwYjlBJyksIFsnQScsICdhJywgJ2InLCAncicsICcwJywgJzknXSksCiAgICAoWydBYmMnLCAnYWJjJywgJ0FCYyddLCBbJ0FCYycsICdBYmMnLCAnYWJjJ10pLAogICAgKFsnMEEnLCAnMDBhJywgJ2EnLCAnQScsICdBMCcsICcwMEEnLCAnMCcsICdhMCcsICcwMCcsICcwYSddLAogICAgICAgIFsnQScsICdhJywgJ0EwJywgJ2EwJywgJzAnLCAnMDAnLCAnMEEnLCAnMDBBJywgJzBhJywgJzAwYSddKQpdCiAKZm9yIGNhc2UgaW4gdGVzdF9jYXNlczoKICAgIHByaW50KGNhc2VbMV0pCiAgICBwcmludChzb3J0ZWQoY2FzZVswXSwga2V5PW15a2V5KSkK
['a', 'b', 'c']
['a', 'b', 'c']
['A', 'b', 'C']
['A', 'b', 'C']
['a', 'B', 'r', '0', '9']
['a', 'B', 'r', '0', '9']
['a1', 'a2', 'a100', '1a', '10a']
['a1', 'a2', 'a100', '1a', '10a']
['alp1', 'alp2', 'alp10', 'ALP11', 'alp100', 'GAM', '1', '2', '100']
['alp1', 'alp2', 'alp10', 'ALP11', 'alp100', 'GAM', '1', '2', '100']
['A', 'a', 'b', 'r', '0', '9']
['A', 'a', 'b', 'r', '0', '9']
['ABc', 'Abc', 'abc']
['ABc', 'Abc', 'abc']
['A', 'a', 'A0', 'a0', '0', '00', '0A', '00A', '0a', '00a']