什么叫做类比,为什么有些 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实现时间序列变化点检测
在时间序列分析和预测中,准确检测结构变化至关重要。新出现的分布模式往往会导致历史数据失去代表性,进而影响基于这些数据训练的模型的有效性。
139 1
|
5天前
|
算法 测试技术 开发者
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗;代码审查通过检查源代码发现潜在问题,提高代码质量和团队协作效率。本文介绍了一些实用的技巧和工具,帮助开发者提升开发效率。
10 3
|
1天前
|
算法 Python
SciPy 教程 之 SciPy 图结构 1
SciPy 图结构教程介绍了图的基本概念及其在算法中的应用。图由节点和边组成,节点代表对象,边表示对象间的连接。SciPy 的 `scipy.sparse.csgraph` 模块提供了处理图结构的工具。邻接矩阵用于表示节点间的连接关系,分为有向图和无向图两种类型。无向图的边是双向的,而有向图的边则有明确的方向。
8 0
|
1月前
|
自然语言处理 Java 编译器
为什么要看 Python 源码?它的结构长什么样子?
为什么要看 Python 源码?它的结构长什么样子?
23 2
|
2月前
|
JSON API 数据格式
使用Python发送包含复杂JSON结构的POST请求
使用Python发送包含复杂JSON结构的POST请求
|
2月前
|
Java Python
全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类
【9月更文挑战第18天】在 Python 中,虽无明确的 `interface` 关键字,但可通过约定实现类似功能。接口主要规定了需实现的方法,不提供具体实现。抽象基类(ABC)则通过 `@abstractmethod` 装饰器定义抽象方法,子类必须实现这些方法。使用抽象基类可使继承结构更清晰、规范,并确保子类遵循指定的方法实现。然而,其使用应根据实际需求决定,避免过度设计导致代码复杂。
|
2月前
|
Python
全网最适合入门的面向对象编程教程:Python函数方法与接口-函数与方法的区别和lamda匿名函数
【9月更文挑战第15天】在 Python 中,函数与方法有所区别:函数是独立的代码块,可通过函数名直接调用,不依赖特定类或对象;方法则是与类或对象关联的函数,通常在类内部定义并通过对象调用。Lambda 函数是一种简洁的匿名函数定义方式,常用于简单的操作或作为其他函数的参数。根据需求,可选择使用函数、方法或 lambda 函数来实现代码逻辑。
|
1月前
|
存储 自然语言处理 编译器
Python 源文件编译之后会得到什么,它的结构是怎样的?和字节码又有什么联系?
Python 源文件编译之后会得到什么,它的结构是怎样的?和字节码又有什么联系?
37 0
|
3月前
|
Python
Python 控制结构:开启震撼编程之旅,犹如舞台上的精彩戏剧,让你的代码活起来!
【8月更文挑战第22天】Python的控制结构是编程的核心,包括条件判断(if-elif-else)和循环(for、while)。例如,可以用if-elif-else判断学生成绩等级,for循环计算1至10的总和,while循环实现猜数字游戏。此外,列表推导式等高级特性让操作更简洁高效。掌握这些结构能显著提升编程效率和代码质量。
50 1
|
3月前
|
设计模式 开发者 索引
Python中的分支结构
Python中的分支结构