目录
1.sort()
内部封装方法
1.sort()
用于对列表元素排序的操作。这是列表对象内置的函数,需要先创建列表对象再调用。
参数key和reverse,这两个参数都是可选的。key定义了排序规则(笼统一点讲就是以元素的哪一项作为排序依据),reverse定义了排序模式(升序(False)或者降序(True))
nums = [2,1,3,4,6,5]
nums.sort(key= lambda a : a,reverse=True)
print(nums)
# 输出[6, 5, 4, 3, 2, 1]
nums.sort(key= lambda a : a,reverse=False)
print(nums)
# 输出[1, 2, 3, 4, 5, 6]
lists = [[2,1],[3,4],[6,5]]
# 以元素中的第二项作为排序依据
lists.sort(key= lambda a : a[1],reverse=True)
print(lists)
# 输出[[6, 5], [3, 4], [2, 1]]
2.index()
用于查找第一个匹配到目标值的下标值,可用于对数据进行去重。
list1 = [2, 3, 3, 45, 34, 56, 34, 26, 78]
# 对list1去重
print([v for i, v in enumerate(list1) if list1.index(v) == i])
# 输出 [2, 3, 45, 34, 56, 26, 78]
外部方法
1.sorted()
sorted()函数不是列表对象的内置函数,参数包括目标列表,以及key和reverse,它返回一个新的列表对象。key用于在排序时指定按照哪一个参数作为排序依据
lists = [[2,1],[3,4],[6,5]]
newLists = sorted(lists,key= lambda a : a[1],reverse=True)
print(newLists)
# 输出[[6, 5], [3, 4], [2, 1]]
2.filter()
filter函数是一个筛选器(过滤),使用filter函数返回的是一个filter对象,它支持使用lambda表达式定义筛选条件,操作的对象必须是可迭代的对象
nums = [2,1,3,4,6,5]
# 筛选出偶数
print(filter(lambda a : a % 2 == 0,nums))
# 输出 <filter object at 0x00000264A20FD420>
# 可以将filter对象转换为列表对象
print(list(filter(lambda a : a % 2 == 0,nums)))
# 输出 [2, 4, 6]
3.map()
map函数主要被用于处理可迭代对象,与filter函数一样支持使用lambda表达式定义筛选条件,操作的对象必须是可迭代的对象,返回map对象,但map函数支持对多个可迭代对象进行映射操作
lists1 = [[2,1],[3,4],[6,5]]
print(map(list,lists))
# 输出 <map object at 0x0000023C5F7ED090>
lists3 = [1,2,3]
# 将列表中元素转换为字符
print(list(map(str,lists3)))
# 输出 ['1', '2', '3']
lists1 = [[2,1],[3,4],[6,5]]
lists2 = [[1,2],[4,3],[5,6]]
# 将list1和list2中的小列表中的元素值两两相加
print(list(map(lambda a,b : [a[0]+b[0],a[1]+b[1]],lists1,lists2)))
# 输出 [[3, 3], [7, 7], [11, 11]]
4.reduce()
归元,又称聚合函数,它将大量数据合并成更小的数据集或单一的值,用法同映射函数map,过滤函数filter一样,仅支持可迭代对象,但其lambda函数写法与以上两项不同。
使用reduce()函数之前,需要导入模块
from functools import reduce
reduce函数有三个参数
但是reduce不支持关键字实参
如
list1 = [12, 24, 11, 78]
ans = reduce(function=lambda x, y: x if x >= (y % 10) else (y % 10), sequence=list1, initial=0)
这样写会报错
TypeError: reduce() takes no keyword arguments
def reduce(function, sequence, initial=_initial_missing):
initial 设定累计值的起始值,它可以不指定
sequence 需要聚合的可迭代对象
function 用于进行聚合的函数,只接受两个参数(x:聚合,返回的最终结果,y:可迭代对象中的每个元素)
function的运行逻辑是
将第一次执行时
x有初始值,与y(可迭代对象中的第一个元素)聚合,得到结果后
将结果赋值给下一次执行的x参数,再一次与y聚合
求和,返回了一个int类型
list1 = [1, 2, 3, 4, 5]
print(reduce(lambda x, y: x + y, list1))
# 输出 15
print(type(reduce(lambda x, y: x + y, list1)))
# 输出 <class 'int'>
找最大值,同样返回int类型
list1 = [1, 2, 3, 4, 5]
print(reduce(lambda x, y: x if x > y else y, list1))
# 输出 5
print(type(reduce(lambda x, y: x + y, list1)))
# 输出 <class 'int'>
去重复值
需要指定起始值[],x的起始值需要是一个空列表,才能完成x + [y] 运算
list1 = [1, 2, 3, 4, 5, 1, 2]
print(reduce(lambda x, y: x + [y] if y not in x else x, list1, []))
# 输出 [1, 2, 3, 4, 5]
5.Counter()
Counter函数主要用于对列表中的元素计数,返回一个Counter对象。可用字典转换函数dict()将Counter对象转换为字典
from collections import Counter
nums = [1,1,2,2,3]
c = Counter(nums)
print(type(c))
# 输出 <class 'collections.Counter'>
print(c)
# 输出 Counter({1: 2, 2: 2, 3: 1})
print(dict(c))
# 输出 {1: 2, 2: 2, 3: 1}