在实际开发中,关于对列表的排序我们会经常遇到。python为我们提供了两种关于对列表的排序方法。一起来看看。
使用列表对象的sort()方法实现
sort方法语法格式:
listname.sort(key = none,reverse = False)
参数说明:
listname: 表示要排序的列表
key: 表示在指定列表选择一个用于比较的键,如果设置 'key = str.lower' ,则表示在排序的时候不区分大小写。
reverse:可选参数,如果将其指定为True,表示降序排列,如果为False,则表示为升序排列
例如:
grade = [85,56,95,45,73,81,83,64,92,77]
print('原列表',grade)grade.sort()
print('升序',grade)grade.sort(reverse=True)
print('降序',grade)
执行上述代码结果如下:
原列表 [85, 56, 95, 45, 73, 81, 83, 64, 92, 77]
升序 [45, 56, 64, 73, 77, 81, 83, 85, 92, 95]
降序 [95, 92, 85, 83, 81, 77, 73, 64, 56, 45]
使用sort()方法排序比较简单,但是使用sort()方法对字符串列表排序的时候,采用的是大写优先原则,就是说先按照大写字母顺序排列,再按照小写字母顺序排列。是否按照大小写顺序排列主要取决于参数key,下面请细看示例。
NBA = ['Bryant','James','curry','durant']
print('原列表',NBA)NBA.sort()
print('区分大小写',NBA)NBA.sort(key = str.lower)
print('不区分大小写',NBA)
执行上述代码结果如下:
原列表 ['Bryant', 'James', 'curry', 'durant']
区分大小写 ['Bryant', 'James', 'curry', 'durant']
不区分大小写 ['Bryant', 'curry', 'durant', 'James']
说明:
采用sort()方法排序时,对中文支持不友好,排序的结果和我们平时的笔画或者拼音都是不一样的,如果想要实现对中文列表的排序,就需要自己手动写方法来实现。
使用内置函数sorted()函数实现
在python中还带有一个内置的sortd()函数,首先来看看它的语法格式:
sorted(intrable, key = None, revrese = False)
参数说明:
intrable: 表示要排序的列表名称
key: 表示在指定列表选择一个用于比较的键,如果设置 'key = str.lower' ,则表示在排序的时候不区分大小写。
revrese:可选参数,如果将其指定为True,表示降序排列,如果为False,则表示为升序排列
例如:
grade = [85,56,95,45,73,81,83,64,92,77]
print('原列表',grade)grade.sort()
print('升序',grade)grade.sort(reverse=True)
print('降序',grade)
执行上述代码结果如下:
原列表 [85, 56, 95, 45, 73, 81, 83, 64, 92, 77]
升序 [45, 56, 64, 73, 77, 81, 83, 85, 92, 95]
降序 [95, 92, 85, 83, 81, 77, 73, 64, 56, 45]
说明:
列表对象的sort()方法和内置函数sorted()方法基本相同,不同之处就在于
sort方法会在原list上直接进行排序,不会创建新的list。而sorted方法不会对原来的数据做任何改动,排序后的结果是新生成的。
如果我们不需要原来的数据而且数据是list类型,可以用sort方法,能够节省空间。否则要用sorted方法。
总的来说就是sorted方法不会对原来的数据做任何改动,排序后的结果是新生成的。所以sorted会返回一个排序过的列表!