Python之高阶函数(sorted)

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))

猜你喜欢

转载自blog.csdn.net/weixin_44828950/article/details/90739058