Python之高阶函数(sorted)
- 什么是sorted函数
sorted() 函数对所有可迭代的对象进行排序操作。
- sort 与 sorted 区别
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
- sorted函数的示例
排序不改变原来的内容,生成一个新的列表
>>> list = [1,5,6,7,9,10,3,4]
>>> print(list)
[1, 5, 6, 7, 9, 10, 3, 4]
>>> list1 = sorted(list)
>>> print(list1)
[1, 3, 4, 5, 6, 7, 9, 10]
>>> print(list)
[1, 5, 6, 7, 9, 10, 3, 4]
>>> list.sort()
>>> print(list)
[1, 3, 4, 5, 6, 7, 9, 10]
>>> list = [1,-5,6,-7,9,10,3,4,-8]
>>> list.sort()
>>> print(list)
[-8, -7, -5, 1, 3, 4, 6, 9, 10]
>>> list2 = sorted(list,key=abs)
>>> print(list2)
[1, 3, 4, -5, 6, -7, -8, 9, 10]
>>> s = ['dfs','Fds','tda','Eds']
>>> print(s)
['dfs', 'Fds', 'tda', 'Eds']
>>> print(sorted(s))
['Eds', 'Fds', 'dfs', 'tda']
>>> print(sorted(s,key=str.lower))
['dfs', 'Eds', 'Fds', 'tda']
>>> print(sorted(s,key=str.upper,reverse=True))
['tda', 'Fds', 'Eds', 'dfs']
对商品进行排序:
info = [
# 商品名称 商品数量 商品价格
('apple1',200,32),
('apple2', 40, 12),
('apple3', 1000, 23),
('apple1', 40, 2),
('apple1', 40, 5)
]
# 按照商品数量进行排序
def sorted_by_count(x):
return x[1]
# 按照商品价格进行排序
def sorted_by_price(x):
return x[2]
# 先按照商品数量进行小-大的排序,如果商品数量一样
# 则按照商品价格由小-大进行排序
def sorted_by_count_price(x):
return x[1],x[2]
print(sorted(info,key=sorted_by_count))
print(sorted(info,key=sorted_by_price))
print(sorted(info,key=sorted_by_count_price))
- sorted函数的综合练习
1.假设我们用一组tuple表示学生名字和成绩,L =[(‘Bob’, 75), (‘Adam’, 92), (‘Bart’, 66),
(‘Lisa’, 88)],按名字进行排序
L =[('Bob', 75), ('Adam', 92), ('Bart', 66),('Lisa', 88)]
#按照名字排序
print(sorted(L,key=lambda x:x[0]))
#按照成绩进行排序
print(sorted(L,key=lambda x:x[1]))
2.题目需求:给定一个整形数组, 将数组中所有的0移动到末尾, 非0项保持不变;
在原始数组上进行移动操作, 勿创建新的数组;
输入:
第一行是数组长度, 后续每一行是数组的一条记录;
4
0 =2
7 =1
0 =2
2 =1
输出:
调整后数组的内容;
7
2
0
0
n = int(input())
li = [int(input()) for i in range(n)]
def move_zore(item):
if item == 0:
return 2
else:
return 1
for i in sorted(li,key=move_zore):
print(i)
3.有一个整数列表(10个元素),要求调整元素的顺序把奇数放在前面 偶数放在后面
import random
li = [random.randint(1,10) for i in range(10)]
print(sorted(li,key=lambda x:2 if x%2 == 0 else 1))