You will have to use sort()
with custom compare function. This function compares first part of string (before _
), then if it is the same, compares second part of string.
def comp(item1, item2):
i1 = [int(i) for i in item1.split('_')]
i2 = [int(i) for i in item2.split('_')]
if i1[0] < i2[0]:
return -1
if i1[0] > i2[0]:
return 1
if i1[1] < i2[1]:
return -1
if i1[1] > i2[1]:
return 1
return 0
Here is the driver code:
import functools
listElements = ['2018_1', '2018_10', '2018_2', '2018_3', '2019_1', '2019_10', '2019_2', '2019_3', '2020_1', '2020_10', '2020_2', '2020_3']
def comp(item1, item2):
i1 = [int(i) for i in item1.split('_')]
i2 = [int(i) for i in item2.split('_')]
if i1[0] < i2[0]:
return -1
if i1[0] > i2[0]:
return 1
if i1[1] < i2[1]:
return -1
if i1[1] > i2[1]:
return 1
return 0
listElements.sort(key=functools.cmp_to_key(comp))
print(listElements)
# ['2018_1', '2018_2', '2018_3', '2018_10', '2019_1', '2019_2, '2019_3', '2019_10', '2020_1', 2020_2, '2020_3', 2020_10']