【Python】关于列表操作函数

本文详细介绍了Python中列表的内部封装方法如`sort()`和`index()`,以及外部方法如`sorted()`,`filter()`,`map()`,`reduce()`和`Counter()`,展示了它们在数据处理中的应用和使用技巧。
摘要由CSDN通过智能技术生成

目录

内部封装方法

1.sort()​​​​​​​

2.index()

外部方法

1.sorted()

2.filter()

3.map()

4.reduce()

5.Counter()


内部封装方法

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}

  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值