Python高级知识点学习(四)

简介: 序列类型Python中的序列类型,序列类型可以使用for循环遍历。序列类,序列是python中非常重要的协议,如何通过实现这个协议,将类变为序列类。Python中的序列分类两个维度区分:容器序列:可以放置任意类型的数据。

序列类型

Python中的序列类型,序列类型可以使用for循环遍历。

序列类,序列是python中非常重要的协议,如何通过实现这个协议,将类变为序列类。

Python中的序列分类两个维度区分:

  • 容器序列:可以放置任意类型的数据。
  • 可变序列、不可变序列。

序列类型的一些协议

from collections import abc
跟容器相关的数据结构的抽象基类都是放到abc里的,可以查看源码看下继承关系:

img_1e3e333170a4420d30e8fb74b501136d.png
image.png

img_d5d344f82f671d1cf777e41ca4045413.png
image.png

list中的extend方法、+、 +=、以及append区别:

a = [1, 2]
# 新对象上+ [3, 4]
c = a + [3, 4]

#就地加, 还是a对象上边操作
a += (3, 4)

a.extend(range(3))

a.append((1, 2))
print(a)

打印结果:
[1, 2, 3, 4, 0, 1, 2, (1, 2)]

可切片对象

列表的切片:模式[start:end:step]
start:从哪开始
end:从哪结束
step:步长

例如:a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
a[::]

  • 切片操作返回的是一个新的列表,不会改变原列表。

实现可切片对象,最关键的是要实现一个魔法函数:__getitem__

什么时候不使用列表List

某些情况最好选择Python中其他内置的数据结构:array和deque。

array 和 List 重要区别:

  • array只能存放指定的数据类型,List不同
  • array性能比List高

列表推导式、生成器表达式、字典推导式

列表推导式:又名列表生成式,通过一行代码来生成列表。

列表生成式性能高于列表操作,
第一:能用尽量用, 因为效率高
第二:如果逻辑过于复杂,建议不要使用,会失去高可读性

生成器表达式:改为小括号即可:
(i for i in range(21) if i % 2 == 1)
转换为lsit ,list((i for i in range(21) if i % 2 == 1))

字典推导式:
一行代码生成 dict。

dict的abc继承关系

from collections.abc import Mapping, MutableMapping

dict属于 mapping 类型

from collections.abc import Mapping, MutableMapping
# dict属于 mapping 类型

a = {}

print(type(a))
print(isinstance(a, MutableMapping))

打印结果:
<class 'dict'>
True

上边代码中,a 并不是继承了MutableMapping,只是实现了MutableMapping中的一些魔法函数。

dict常用方法:

  • clear方法:清空dict
  • copy方法:返回浅拷贝

浅拷贝的时候会互相影响:

one = {
     "a": {"name": "zhao"},
     "b": {"age": "20"}
}

two = one.copy()

two['a']['name'] = 'wang'

print(two)
print(one)

打印结果:
{'a': {'name': 'wang'}, 'b': {'age': '20'}}
{'a': {'name': 'wang'}, 'b': {'age': '20'}}

深拷贝:

import copy
one = {
     "a": {"name": "zhao"},
     "b": {"age": "20"}
}

two = copy.deepcopy(one)

two['a']['name'] = 'wang'

print(two)
print(one)
打印结果:
{'a': {'name': 'wang'}, 'b': {'age': '20'}}
{'a': {'name': 'zhao'}, 'b': {'age': '20'}}
  • fromkeys方法:快速生成以list元素为key的dict,fromkeys参数接受可迭代对象。
new_list = ["a", "b"]

new_dict = dict.fromkeys(new_list, {"age": "18"})

运行结果:
{'a': {'age': '18'}, 'b': {'age': '18'}}
  • get方法:
new_dict = {"a": "a", "b": "b"}
print(new_dict.get('c', 'c'))

打印结果:
c
  • setdefault方法:去dict中取值,如果没有值,则设置完默认值后再取值,如果有值,则只取值。
# dict没有值:
a = {"a": "a", "b": "b"}
b = a.setdefault("c", "c")
print(b)
print(a)

打印结果:
c
{'a': 'a', 'b': 'b', 'c': 'c'}
# dict有值
a = {"a": "a", "b": "b", "c": "2"}
b = a.setdefault("c", "c")
print(b)
print(a)
打印结果:
2
{'a': 'a', 'b': 'b', 'c': '2'}
  • update方法:合并两个dict
img_a2af7ccb93ec0a5541bb653791d21688.jpe
qrcode_for_gh_60369a20e6f5_258.jpg

可以关注我的微信公众号,会更新Python知识点,也会有其他语言和软件开发中的各种坑,都会记录在公众号。

目录
相关文章
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
660 2
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
863 1
|
算法 Java Docker
(Python基础)新时代语言!一起学习Python吧!(三):IF条件判断和match匹配;Python中的循环:for...in、while循环;循环操作关键字;Python函数使用方法
IF 条件判断 使用if语句,对条件进行判断 true则执行代码块缩进语句 false则不执行代码块缩进语句,如果有else 或 elif 则进入相应的规则中执行
1833 1
|
安全 数据安全/隐私保护 Python
Python学习的自我理解和想法(27)
本文记录了学习Python第27天的内容,主要介绍了使用Python操作PPTX和PDF的技巧。其中包括通过`python-pptx`库创建PPTX文件的详细步骤,如创建幻灯片对象、选择母版布局、编辑标题与副标题、添加文本框和图片,以及保存文件。此外,还讲解了如何利用`PyPDF2`库为PDF文件加密,涵盖安装库、定义函数、读取文件、设置密码及保存加密文件的过程。文章总结了Python在处理文档时的强大功能,并表达了对读者应用这些技能的期待。
|
算法 IDE 测试技术
python学习需要注意的事项
python学习需要注意的事项
631 57
|
存储 Java 索引
(Python基础)新时代语言!一起学习Python吧!(二):字符编码由来;Python字符串、字符串格式化;list集合和tuple元组区别
字符编码 我们要清楚,计算机最开始的表达都是由二进制而来 我们要想通过二进制来表示我们熟知的字符看看以下的变化 例如: 1 的二进制编码为 0000 0001 我们通过A这个字符,让其在计算机内部存储(现如今,A 字符在地址通常表示为65) 现在拿A举例: 在计算机内部 A字符,它本身表示为 65这个数,在计算机底层会转为二进制码 也意味着A字符在底层表示为 1000001 通过这样的字符表示进行转换,逐步发展为拥有127个字符的编码存储到计算机中,这个编码表也被称为ASCII编码。 但随时代变迁,ASCII编码逐渐暴露短板,全球有上百种语言,光是ASCII编码并不能够满足需求
487 4
基于python的网络课程在线学习交流系统
本研究聚焦网络课程在线学习交流系统,从社会、技术、教育三方面探讨其发展背景与意义。系统借助Java、Spring Boot、MySQL、Vue等技术实现,融合云计算、大数据与人工智能,推动教育公平与教学模式创新,具有重要理论价值与实践意义。
|
JSON 数据安全/隐私保护 数据格式
拼多多批量下单软件,拼多多无限账号下单软件,python框架仅供学习参考
完整的拼多多自动化下单框架,包含登录、搜索商品、获取商品列表、下单等功能。
|
机器学习/深度学习 数据安全/隐私保护 计算机视觉
过三色刷脸技术,过三色刷脸技术教程,插件过人脸python分享学习
三色刷脸技术是基于RGB三通道分离的人脸特征提取方法,通过分析人脸在不同颜色通道的特征差异

推荐镜像

更多