Python 自带的 sort() 函数默认是从小到大进行排序的,与C++的排序函数类似,也可以通过自定义排序函数来指定排序的规则。下面以牛客的一道例题来讲解:
这道题主要是对字符串数组按照字典序逆序进行排序,其中有两种特殊情况:
(1)空字符串排在最前;
(2)若一个短字符串是另一个长字符串的前缀则短字符串排在前面。
这里如果使用 python 自带的 sort / list.sort(),则是按照字典序升序排序。因此这里需要自定义排序函数,使其满足题目条件。
import functools
def mysort(x, y):
if y.startswith(x):
return -1
elif x.startswith(y):
return 1
else:
if x < y:
return 1
else:
return -1
if __name__ == '__main__':
string = input()
string = string.split(',')
string.sort(key=functools.cmp_to_key(mysort))
num_str = len(string)
for i in range(num_str):
print(string[i], end='')
if i != num_str - 1:
print(',', end='')
else:
print('\n')