什么叫做类比,为什么有些 Python 入门教程结构不合理?

简介: 什么叫做类比,为什么有些 Python 入门教程结构不合理?

摄影:产品经理这家店的网红脸太多了

想必关注未闻 Code的同学或多或少都在网上看过各种各样的 Python 入门教程。这些教程在讲 Python 基础数据结构的时候,一般是按照下面这个模式来讲的:

  1. 数字、字符串、浮点数
  2. 列表
  3. 字典
  4. 集合

这个结构虽然说是中规中矩由浅入深,但是它并没有让读者做到类比学习触类旁通。

所谓类比

为什么这样说呢?因为这些教程的教学模式,使得读者不容易发现字符串、列表、元组的相同之处。

我们从“读”这个角度来看看这三个数据结构。假设有一个字符串叫做a,有一个列表叫做b,有一个元组叫做c。那么大家请看如下的操作。

按索引读取元素

a[0]  # 字符串第一个字符
b[0]  # 列表第一个元素
c[0]  # 元组第一个元素
a[3]  # 字符串第4个字符
b[3]  # 列表第4个元素
c[3]  # 元组第4个元素
a[-1]  # 字符串最后一个字符
b[-1]  # 列表最后一个元素
c[-1]  # 元组最后一个元素

按索引读取元素这个操作,字符串、列表和元组完全相同。

切片

a[1: 4]  # 读取字符串第2、3、4个字符
b[1: 4]  # 读取列表第2、3、4个元素
c[1: 4]  # 读取元组第2、3、4个元素
a[: 4]  # 读取字符串前4个字符
b[: 4]  # 读取列表前4个元素
c[: 4]  # 读取元组前4个元素
a[-3: ]  # 读取字符串最后3个字符
b[-3: ]  # 读取列表最后3个元素
c[-3: ]  # 读取元组最后3个元素

切片这个操作,字符串、列表和元组完全相同。

循环迭代

for char in a:  # 对字符串进行迭代
    print(char)
for element in b:  # 对列表进行迭代
    print(element)
for element in c:  # 对元组进行迭代
    print(element)

循环迭代这个操作,字符串、列表和元组完全相同。

倒序输出

a[::-1]  # 把字符串倒序 
b[::-1]  # 把列表倒序
c[::-1]  # 把元组倒序

运行效果如下图所示:


倒序输出这个操作,字符串、列表和元组完全相同。

元素是否在里面

if 'x' in a:
    print('字符 x 在字符串中!')
if 3 in b:
    print('元素 3 在列表中!')
if 3 in c:
    print('元素 3 在元组中!')

判断一个字符是否在字符串中,或者判断一个元素是否在列表、元组中,操作完全相同。

查找索引

a = 'hello'
index = a.index('e')
print('字符e 在字符串中的索引为:', index)
b = ['kingname', 'pm', 'ui', 'spider']
index = b.index('pm')
print('元素pm在列表中的索引为:', index)
c = ('kingname', 'pm', 'ui', 'spider')
index = c.index('pm')
print('元素pm在元组中的索引为:', index)

运行效果如下图所示:

查询子字符串在字符串中的索引,或者根据元素查询其在列表、元组中的索引,操作完全相同。

统计出现次数

a = 'helloworld'
num = a.count('l')
print('字符 l 在字符串中出现的次数为:', num)
b = ['kingname', 'pm', 'ui', 'pm', 'spider']
num = b.count('pm')
print('元素 pm 在列表中出现的次数为:', num)
c = ('kingname', 'pm', 'ui', 'pm', 'spider')
num = c.count('pm')
print('元素pm 在元组中出现的次数为:', num)

运行效果如下图所示:

统计出现次数,这个操作对字符串、列表和元组完全相同。

拼接操作

a = 'hello'
b = 'world'
print(a + b)
a = [1, 2, 3]
b = [4, 5, 6]
print(a + b)
a = (1, 2, 3)
b = (4, 5, 6)
print(a + b)

运行效果如下图所示:

加号拼接这个操作,字符串、列表和元组完全相同。

总结

在“读”这个操作上面,字符串、列表、元组是完全相同的,只要掌握了其中一个,另外两个自动就知道怎么操作了。这就叫做类比。

先学习了相同的操作,再来分别学习每个数据结构各自独特的操作,这样才能做到事半功倍,举一反三。

令人遗憾的是,目前市面上绝大部分的 Python 教程,都没有做到这一点。

目录
相关文章
|
2月前
|
机器学习/深度学习 数据采集 算法
时间序列结构变化分析:Python实现时间序列变化点检测
在时间序列分析和预测中,准确检测结构变化至关重要。新出现的分布模式往往会导致历史数据失去代表性,进而影响基于这些数据训练的模型的有效性。
178 1
|
5天前
|
算法 定位技术 Python
震惊!Python 图结构竟然可以这样玩?DFS&BFS 遍历技巧大公开
在 Python 编程中,图是一种重要的数据结构,而深度优先搜索(DFS)和广度优先搜索(BFS)是遍历图的两种关键算法。本文将通过定义图的数据结构、实现 DFS 和 BFS 算法,并通过具体示例展示其应用,帮助读者深入理解这两种算法。DFS 适用于寻找路径和检查图连通性,而 BFS 适用于寻找最短路径。掌握这些技巧,可以更高效地解决与图相关的复杂问题。
17 2
|
11天前
|
Python
SciPy 教程 之 SciPy 图结构 7
《SciPy 教程 之 SciPy 图结构 7》介绍了 SciPy 中处理图结构的方法。图是由节点和边组成的集合,用于表示对象及其之间的关系。scipy.sparse.csgraph 模块提供了多种图处理功能,如 `breadth_first_order()` 方法可按广度优先顺序遍历图。示例代码展示了如何使用该方法从给定的邻接矩阵中获取广度优先遍历的顺序。
22 2
|
12天前
|
算法 Python
SciPy 教程 之 SciPy 图结构 5
SciPy 图结构教程,介绍图的基本概念和SciPy中处理图结构的模块scipy.sparse.csgraph。重点讲解贝尔曼-福特算法,用于求解任意两点间最短路径,支持有向图和负权边。通过示例演示如何使用bellman_ford()方法计算最短路径。
24 3
|
18天前
|
算法 测试技术 开发者
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗;代码审查通过检查源代码发现潜在问题,提高代码质量和团队协作效率。本文介绍了一些实用的技巧和工具,帮助开发者提升开发效率。
19 3
|
13天前
|
算法 索引 Python
SciPy 教程 之 SciPy 图结构 3
SciPy 图结构教程:介绍图的基本概念、节点和边的定义,以及如何使用 SciPy 的 `scipy.sparse.csgraph` 模块处理图结构。重点讲解 Dijkstra 最短路径算法及其在 SciPy 中的应用,包括 `dijkstra()` 方法的参数设置和使用示例。
11 0
|
13天前
|
Python
SciPy 教程 之 SciPy 图结构 2
《SciPy 教程 之 SciPy 图结构 2》介绍了图结构作为算法学中的重要框架,通过 `scipy.sparse.csgraph` 模块处理图结构。文章示例展示了如何使用 `connected_components()` 方法查找所有连接组件,通过创建稀疏矩阵并调用该方法实现。
8 0
|
14天前
|
算法 Python
SciPy 教程 之 SciPy 图结构 1
SciPy 图结构教程介绍了图的基本概念及其在算法中的应用。图由节点和边组成,节点代表对象,边表示对象间的连接。SciPy 的 `scipy.sparse.csgraph` 模块提供了处理图结构的工具。邻接矩阵用于表示节点间的连接关系,分为有向图和无向图两种类型。无向图的边是双向的,而有向图的边则有明确的方向。
26 0
|
1月前
|
自然语言处理 Java 编译器
为什么要看 Python 源码?它的结构长什么样子?
为什么要看 Python 源码?它的结构长什么样子?
26 2
|
2月前
|
JSON API 数据格式
使用Python发送包含复杂JSON结构的POST请求
使用Python发送包含复杂JSON结构的POST请求