Sorting in python - how to sort a list containing alphanumeric values? Sorting in python - how to sort a list containing alphanumeric values? python-3.x python-3.x

Sorting in python - how to sort a list containing alphanumeric values?


You want to use natural sort:

import re_nsre = re.compile('([0-9]+)')def natural_sort_key(s):    return [int(text) if text.isdigit() else text.lower()            for text in re.split(_nsre, s)]   

Example usage:

>>> list1 = ["1", "100A", "342B", "2C", "132", "36", "302F"]>>> list1.sort(key=natural_sort_key)>>> list1['1', '2C', '36', '100A', '132', '302F', '342B']

This functions by splitting the elements into lists separating out the numbers and comparing them as integers instead of strings:

>>> natural_sort_key("100A")['', 100, 'a']>>> natural_sort_key("342B")['', 342, 'b']

Note that this only works in Python3 if you are always comparing ints with ints and strings with strings, otherwise you get a TypeError: unorderable types exception.


Well, you have to find a way to convert your strings to numbers first. For example

import redef convert(str):    return int("".join(re.findall("\d*", str)))

and then you use it as a sort key:

list1.sort(key=convert)