sort与sorted区别:
- sort是应用在list列表上的方法,sorted可以对所有可迭代的对象进行排序操作
- list.sort()不会返回对象,会改变原有的list,即直接在原来的list基础上修改,而sorted()函数会返回一个新列表,不是在原来的基础上进行操作
sort()函数
用于对原列表进行就地排序,列表中的元素可以是数字或者字符串
语法
list.sort(reverse=True|False, key=myFunc)
参数
reverse:排序规则,reverse = True 降序, reverse = False升序(默认)
key: 指定排序标准的函数,key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序(实现自定义的排序)
返回值
该方法没有返回值,但是会对列表的对象进行排序
实例
# 列表
vowels = ['e', 'a', 'u', 'o', 'i']
# 升序
vowels.sort()
# 升序输出: ['a', 'e', 'i', 'o', 'u']
print('升序输出:', vowels)
# 降序
vowels.sort(reverse=True)
# 输出结果:['u', 'o', 'i', 'e', 'a']
print ('降序输出:', vowels)
# 自定义排序(使用key参数)
# 获取列表的第二个元素
def takeSecond(elem):
return elem[1]
# 列表
random = [(2, 2), (3, 4), (4, 1), (1, 3)]
# 指定第二个元素排序
random.sort(key=takeSecond)
# 排序列表: [(4, 1), (2, 2), (1, 3), (3, 4)]
print ('排序列表:', random)
扩展
x = [4,6,2,1,7,9]
y = x.sort() # Don't do this!
print(y) # None
# 正确方式:先将y关联到x的副本,再对y进行排序
x = [4,6,2,1,7,9]
y = x.copy()
y.sort()
print(x) # [4, 6, 2, 1, 7, 9]
print(y) # [1, 2, 4, 6, 7, 9]
x = [4,6,2,1,7,9]
y = sorted(x)
print(x) # [4, 6, 2, 1, 7, 9]
print(y) # [1, 2, 4, 6, 7, 9]
# 实际上,sorted函数可用于任何序列,但总是返回一个列表
z = sorted('Python')
print(z) # ['P', 'h', 'n', 'o', 't', 'y']
sorted()函数
对所有可迭代的对象进行排序操作
语法
sorted(iterable, reverse=True|False, key=myFunc)
参数
iterable:可迭代对象
reverse:排序规则,reverse = True 降序,reverse = False升序(默认)
key:指定排序标准的函数,key接受的函数返回值,表示此元素的权值,将按照权值大小进行排序(实现自定义的排序)
返回值
返回重新排序的列表
实例
# 默认为升序
list1 = sorted([5, 2, 3, 1, 4])
print(list1) # [1, 2, 3, 4, 5]
# sorted()函数可以接收任何的iterable
list2 = sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'})
print(list2) # [1, 2, 3, 4, 5]
# 利用key进行倒序排序
example_list = [5, 0, 6, 1, 2, 7, 3, 4]
result_list = sorted(example_list, key=lambda x: x*-1)
print(result_list) # [7, 6, 5, 4, 3, 2, 1, 0]
# 默认情况下,对字符串排序,是按照ASCII的大小比较的
list3 = sorted(['bob', 'about', 'Zoo', 'Credit'])
print(list3) # ['Credit', 'Zoo', 'about', 'bob']
# 排序忽略字母大小写
list4 = sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
print(list4) # ['about', 'bob', 'Credit', 'Zoo']
# 降序排序 reverse=True
example_list = [5, 0, 6, 1, 2, 7, 3, 4]
list5 = sorted(example_list, reverse=True)
print(list5) # [7, 6, 5, 4, 3, 2, 1, 0]
# 扩展
# 可以通过key的值来进行数组/字典的排序
array = [{"age":20,"name":"a"},
{"age":25,"name":"b"},
{"age":10,"name":"c"}]
array = sorted(array,key=lambda x:x["age"])
print(array)
# 输出结果:
# [{'age': 10, 'name': 'c'},
# {'age': 20, 'name': 'a'},
# {'age': 25, 'name': 'b'}]
# 先按照成绩降序排序,相同成绩的按照名字升序排序:
d1 = [{'name':'alice', 'score':38},
{'name':'bob', 'score':18},
{'name':'darl', 'score':28},
{'name':'christ', 'score':28}]
l = sorted(d1, key=lambda x:(-x['score'], x['name']))
print(l)
# 输出结果:
#[{'name': 'alice', 'score': 38},
# {'name': 'christ', 'score': 28},
# {'name': 'darl', 'score': 28},
# {'name': 'bob', 'score': 18}]