Python常用对象之列表操作手册之内置函数

Python常用对象之列表操作手册之内置函数

本篇文章仅讲解操作列表的内置函数, 运算符、列表方法等请看后续博文

约定: 所有空字符串、空列表等空对象都为False, None与任何0值都为False
约定: 这里介绍的全局函数不仅适用于列表, 还适用于大部分可迭代对象
约定: 示例代码中 >>> 表示交互输入
约定: 示例代码中 <<< 表示交互输出

内置函数

函数 说明
len 获取列表元素个数
del 删除列表元素 (支持切片语法)
max 获取列表中的最大元素
min 获取列表中的最小元素
sum 累加列表所有元素
range 创建一个列表 (通过list转换)

实际为创建一个生成器
sorted 排序, 返回排序后的副本

list.sort方法不同的是, list.sort方法会修改自身
reversed 反转列表元素, 返回反向迭代器 (可通过list转为列表)

list.reverse方法不同的是, list.reverse方法会修改自身
list 创建空列表, 将可迭代对象转换为列表
tuple 转为元组
all 当列表中的所有元素都为True时返回True, 否则返回False

常用于参数校验
any 当列表中至少一个元素值为True时返回True, 否则返回False

常用于参数校验
enumerate 创建一个枚举对象 (可通过list转为列表)

[(index, item), …] # 可以理解为这种模型
常用于for循环
filter 列表过滤, 返回过滤后的迭代器 (可通过list转为列表)

默认过滤掉元素值为False的所有元素
frozenset 列表去重, 返回一个不可变集合对象 (可通过list转为列表)
set 转为集合, 列表去重, 返回一个集合对象 (可通过list转为列表)
map 列表元素处理, 返回一个可迭代对象 (可通过list转为列表)
zip 列表聚合

[(x[0], y[0]), (x[1], y[1])…] # 可以理解为这种模型
import random
random.choice
随机返回列表中的一个元素

del函数示例

这里用到了切片语法, 如果您对切片语法不甚了解, 详细切片语法请看我的后续博文, 或者关注我的微信公众号

>>> lis = list(range(10))  # 创建一个包含10个元素的列表, 0-9
>>> lis  # 查看列表元素
<<< [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> del lis[0]  # 删除第一个元素
>>> lis  # 查看列表元素
<<< [1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> del lis[0: 3]  # 从0号元素开始删除到3号元素 (3号元素不会删除, 0, 1, 2)
>>> lis  # 查看列表元素
<<< [4, 5, 6, 7, 8, 9]

>>> del lis[::2]  # 每隔一个元素删除一个元素
>>> lis  # 查看列表元素
<<< [5, 7, 9]

max、min、sum函数示例

>>> lis = [1, 2, 3, 4, 5]  # 创建一个列表

>>> max(lis)  # 获取列表中的最大元素
<<< 5  # 返回结果

>>> min(lis)  # 获取列表中的最小元素
<<< 1  # 返回结果

>>> sum(lis)  # 累加列表元素
<<< 15  # 返回结果

sorted、reversed函数示例

>>> lis = [1, 5, 7, 3, 8, 2, 9]  # 创建一个乱序列表

>>> sorted(lis)  # 升序排序
<<< [1, 2, 3, 5, 7, 8, 9]  # 排序结果

>>> sorted(lis, reverse=True)  # 降序排序
<<< [9, 8, 7, 5, 3, 2, 1]  # 排序结果

>>> list(reversed(lis))  # 反转列表元素
<<< [9, 2, 8, 3, 7, 5, 1]  # 反转结果

all、any函数示例

>>> # all函数, 所有元素都为True结果才为True
>>> all([1, 2, 3])  # 所有元素都为True
<<< True  # 返回True
>>> all(['', 'abc'])  # 空字符串为False, 返回False
<<< False  # 返回False

>>> # any函数, 任意元素为True结果就为True
>>> any([1, 2, 3])  # 所有元素都为True
<<< True  # 返回True
>>> any(['', 'abc'])  # 'abc'为True, 返回True
<<< True  # 返回True

enumerate函数示例

>>> lis = list('ABCDEF')  # 创建一个包含字母A-F的字符串列表
>>> lis  # 查看列表
<<< ['A', 'B', 'C', 'D', 'E', 'F']

>>> enum = enumerate(lis)  # 创建一个枚举对象
>>> enum  # 查看枚举对象
<<< <enumerate object at 0x000001B83C2900E8>  # 没有任何意义, 知道他是一个可迭代对象就行了
>>> list(enum)  # 转为列表查看
<<< [(0, 'A'), (1, 'B'), (2, 'C'), (3, 'D'), (4, 'E'), (5, 'F')]
>>> # 这里解释下上面的输出结果: 这是一个元组列表, 元组的0号元素为列表元素索引, 1号元素为列表元素

>>> # 使用拆包语法来打印下看看
>>> # 注意: 因为上面的list(enum)已经把迭代器耗尽了, 所以这里需要重新创建枚举对象
>>> # 关于迭代器的详细介绍请看我的后续博文
>>> for i, item in enumerate(lis):
>>> 	print(i, item)
<<< 0 A
<<< 1 B
<<< 2 C
<<< 3 D
<<< 4 E
<<< 5 F

filter函数示例: 仅保留整形元素

>>> lis = [0, 1, 2, '', 'A', 'B']  # 创建一个列表
>>> # filter的默认行为为去除所有Flase元素, 返回一个迭代器, 这里直接把它转为列表
>>> list(filter(None, lis))
<<< [1, 2, 'A', 'B']  # 过滤结果, 可以看到0跟''已经被过滤掉了

>>> # 实际上filter第一个参数为, 接收一个当前迭代元素作为参数的回调函数, 返回True表示保留, False表示过滤
>>> # 这里演示一个仅保留整形元素的例子
>>> lis  # 查看列表
<<< [0, 1, 2, '', 'A', 'B']  # 因为我们没有保存过滤结果, 所以这还是创建时的列表
>>> list(filter(lambda x: isinstance(x, int), lis))  # 一行代码搞定, python就是这么简洁优雅
<<< [0, 1, 2]  # 过滤结果, 可以看到现在就只剩下整形元素了, 所有字符串元素都被过滤掉了
>>> # 这里简单解释下上面的过滤代码
>>> # 使用lambda关键字定义一个匿名函数
>>> # 使用内置函数isinstance判断列表元素是否为int的实例

frozenset、set函数示例: 去重

>>> lis = [1, 1, 2, 3, 6, 6, 6, 8, 9, 1]  # 定义一个包含重复元素的列表
>>> list(frozenset(lis))  # 转为不可变集合对象, 去重
<<< [1, 2, 3, 6, 8, 9]  # 去重结果

>>> list(set(lis))  # 转为集合对象, 去重
<<< [1, 2, 3, 6, 8, 9]  # 去重结果

map函数示例

>>> lis = [1, 2, 3, 4]  # 定义一个列表
>>> list(map(lambda x: x*x, lis))  # 将每个元素与自身相乘
<<< [1, 4, 9, 16]  # 处理结果

zip函数示例

>>> lis_key = [1, 2, 3] # 定义一个整数列表
>>> lis_val = ['一', '二', '三']  # 定义一个字符串列表
>>> list(zip(lis_key, lis_val))  # 聚合
<<< [(1, '一'), (2, '二'), (3, '三')]  # 聚合结果

>>> # 有什么用? 转为字典啊
>>> dict(zip(lis_key, lis_val))  # 转为字典
<<< {1: '一', 2: '二', 3: '三'}  # 转换结果

random.choice方法示例

>>> import random  # 导入随机数模块


>>> lis = list(range(10))  # 创建一个包含10个元素的列表, 0-9
>>> random.choice(lis)  # 随机从列表中返回一个元素
<<< 3  # 返回结果

如果您觉得此文章对您有所帮助, 请帮我点赞哦~



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章