sorted()与sort()函数
一 sorted()函数
有三个参数:
第一个是iterable,必选,待排序的集合,可以是list,tuple,set,dict等
第二个是reverse,可选,默认为False按升序排列,True按降序排列
第三个是key,可选,这是一个函数,返回一个key,可以看做是排序的标准,注意这里的key输入的是待排序集合的每一个元素,返回的是按照映射函数排序后的结果,这里的函数可以有多个,即先按fun1排序后,在按fun2排序,并且这里的排序函数可以直接是一个list,则按list从头到尾进行排序,
sorted函数不修改原始列表,而是返回新的列表,而sort()直接修改原数据
# 对list排序 fruits = ['apple', 'pear', 'peach', 'banana'] print(sorted(fruits, key=lambda x: len(x))) # ['pear', 'apple', 'peach', 'banana'] # 对list内的tuple排序(对list内的dict排序同理) student_tuple = [('Bob','boy',17), ('Jack','girl',19), ('Tom','boy',12)] print(sorted(student_tuple, key=lambda student: student[2])) # [('Tom', 'boy', 12), ('Bob', 'boy', 17), ('Jack', 'girl', 19)] # 对字典的值排序 student_dict = {'Bob':{'sex':'boy', 'age':17}, 'Jack':{'sex':'girl','age':19}, 'Tom':{'sex':'boy','age':12}} # 直接排序只能对字典的key进行排序 print(sorted(student_dict)) # ['Bob', 'Jack', 'Tom'] # 将字典中的每个key-values对转化成一个tuple,便于排序,因为字典是无序的,无法直接对字典排序 student_dict_items = student_dict.items() print(sorted(student_dict_items, key=lambda x: x[1]['age'])) # [('Tom', {'sex': 'boy', 'age': 12}), ('Bob', {'sex': 'boy', 'age': 17}), ('Jack', {'sex': 'girl', 'age': 19})]
1 sorted可以对series,ndarry,list类型进行排序
默认会从小到大进行排序
arr1 = np.array([1,2,3,4,44,3243,43,8678]) print(sorted(arr1)) print(type(sorted(arr1)))
对ndarry排序时,返回的是一个list。输出:
[1, 2, 3, 4, 43, 44, 3243, 8678] <class 'list'>
2 sort()可以对list中元素进行排序
注意list中含有nan时,不是真正的排序,sorted和sort效果基本一致,只不过后者可直接在原数据上修改.
a = [3,4,2,2,4,np.nan,5,3,5,6] print(a) print(sorted(a)) a.sort(reverse= False) print(a) #[3, 4, 2, 2, 4, nan, 5, 3, 5, 6] #[2, 2, 3, 3, 4, 4, nan, 5, 5, 6] #[2, 2, 3, 3, 4, 4, nan, 5, 5, 6]