def ver_val(s): s = s.split(".") length = len(s) s += ['0']*(3-length) # Outer pad array right zeros. s = ['0'*(3-len(x)) + x for x in s] # Inner pad string left zeros s += [str(length)] # Take length into consideration, less is better. return ''.join(s) def solution(l): d = dict() for version in l: d[version] = ver_val(version) l.sort(key=lambda x: d[x]) return l