【免费】Python数据分析与脚本编写课程|第三节:Python的基础介绍(下)
新的一周啦,各位小伙伴们有没有进行上一节内容【免费】Python数据分析与脚本编写课程|Python的基础介绍(上)的操作呀?
上一周我们学习了最基础的量赋值与数据类型内容,这一周小亚老师要带大家进行列表、切片和循环的学习。大家再坚持一下,下周就有惊喜出现。
Python中另一种常见的数据结构是列表(list)。列表可以用来将多个值或变量组合在一起,并使用方括号 [] 来声明。小伙伴一定要注意Python对方括号 []、圆括号 () 和花括号 {} 赋予了特殊含义,因此必须非常小心使用这些字符。列表中的值用逗号分隔。
Python内置了几种可以用于列表的函数。下面这段代码列表包含13个底物浓度,大家可以在自己的notebook中操作一下,其中包含了我们上周提到的 print 函数和新的 len 函数,函数 len 可以用来确定列表的长度。
# 这是一个列表
substrate_concs = [1.0, 2.0, 3.0, 4.0, 6.0, 8.0, 10.0, 15.0, 20.0, 30.0, 50.0, 75.0, 100.0] # 微摩尔
# 我们可以确定它的长度
s_length = len(substrate_concs)
# 打印列表的长度
print('该列表包含', s_length, '个底物浓度')
如果各位同学想对列表中的某个特定元素进行操作,可以使用列表的名称,然后在括号中写入你想要的元素。Python中的计数从零开始,所以列表的第一个元素是 list[0]。
Tip
Python从0开始计数的原因主要是受到计算机科学领域的传统和历史影响。这种计数方法在许多编程语言中是通用的,包括C、C++、Java、JavaScript等。尽管从1开始计数在某些场景下可能更符合我们的直觉,但从0开始计数已经成为计算机科学和编程领域的一种约定俗成的标准。因此,Python选择遵循这一传统,使得程序员在跨语言编程时能够更加统一和方便。
# 打印列表的第一个元素
print(substrate_concs[0])
大家输入之后是不是获得了1.0,各位小伙伴可以把0改为其他数字,尝试提取
其他的元素试试。接下来各位小伙伴可以将列表中的元素用作计算中的变量。
# 将最后一个底物浓度转换为纳摩尔(nM)
concentration_nM = substrate_concs[12] * 1000
print(concentration_nM)
我们可以获得100000.0

刚才介绍的就是列表,接下来我们介绍一下切片。
有时我们会想要创建一个现有列表的子集作为新列表。例如,我们可能想要创建一个仅包含之前列表的前几个元素的新列表,这称为切片。切片的Python语法是:new_list = list_name[start:end]
列表名称:list_name 是原始列表的名称。
起始索引:start 是起始索引,表示切片开始的位置(包含该位置的元素)。
结束索引:end 是结束索引,表示切片结束的位置(不包含该位置的元素)。
在进行切片时,记住Python中的计数方式非常重要。请记住,计数从零开始,所以列表的第一个元素是 list_name[0]。当你指定切片的最后一个元素时,它会包含到但不包括该元素。
所以,如果我们输入
short_list = substrate_concs[0:3]
print(short_list)
那么我们会得到:
包括substrate_concs[0]、substrate_concs[1]和 substrate_concs[2],但不包括 substrate_concs[3]。也就是包含1.0(第0个元素), 2.0(第1个元素), 3.0(第2个元素),但是没有4.0(第4个元素)。

一些其他的用法:如果我们输入的时候不包含起始索引,切片会自动从 list_name[0] 开始。如果你不包含结束索引,切片会自动延续到列表的末尾。
大家可以尝试一下下边的代码,看看会得到什么内容。
slice1 = substrate_concs[8:]
slice2 = substrate_concs[:3]
print('slice1 is', slice1)
print('slice2 is', slice2)

如果大家不指定一个新的变量名(上周的内容),什么也不会发生。看一下我们上面的例子,如果我们只是对列表进行切片,substrate_concs 不会发生任何变化。

上面就是切片的内容,至于怎么使用,我们之后会给大家介绍。目前大家要做的就是培养“码感”,理解计算机的语言就好。
有些时候,我们会想对列表中的每个元素进行操作。这个时候就需要重复多次操作,我们可以用for 循环来实现。
for variable in list:
do things using
variable
上面这个结构是Python中常用的for循环,主要用于遍历序列(如列表、元组、字符串等)。让我们来看下每一行的意思:
for variable in list:这个部分是循环的开头。它表示我们要从list(可以是任何序列类型)中逐个取出元素,每次取出的元素会被赋值给variable。一定要注意这里有个英文字符的:号哦!(再强调一下,各位同学在输入的时候一定要注意输入语言,不然会疯狂报错)
do things using variable缩进的部分是循环体,也就是循环中每次迭代要执行的代码。在这个结构中,你可以使用variable来进行操作,因为variable在每次迭代时代表当前遍历到的元素。各位小伙伴请注意,缩进在 Python 中非常重要。没有类似于“结束”或“退出”语句来告诉你循环已经结束。缩进显示了哪些语句在循环中,哪些不是。
让我们使用一个循环来计算一个列表中所有底物浓度的初始速度。
substrate_concs = [1.0, 2.0, 3.0, 4.0, 6.0, 8.0, 10.0, 15.0, 20.0, 30.0, 50.0, 75.0, 100.0]
for number in substrate_concs:
velocity = Vmax * number / (Km + number)
print(velocity)
大家运行一下,会发现什么?有些小伙伴发现报错了!

出现NameError: name 'Vmax' is not defined的原因是,计算机没有发现Vmax被定义过。
这是因为使用 Jupyter Notebook作为 Python 解释器,Notebook只会执行当前的代码块。这可能会导致一些意想不到的后果。有些时候,如果我们更改了一个值,然后回去运行较早的代码块,它会使用新值,而不是第一次定义的值,这可能会给你错误的分析。同样,如果我们在很久之后再打开 Jupyter Notebook,并尝试运行中间的代码块,它可能会告诉你变量未定义,尽管你可以清楚地看到它们在较早的代码块中已定义。但是如果你没有重新运行这些代码块,那么 Python 不知道它们的存在。
所以我们可以将上节课的代码再输入一遍,加在上面,就像这样:
Km, vmax, substrate_concentration = 15.0, 100.0, 8.0
然后,又报错了!(遇到报错不要慌,我们再仔细看下提示)
NameError: name 'Vmax' is not defined
这是为什么呀?是因为这里的Vmax中的V是大写,我们马上进行修改。

顺利运行!但如果不只是打印值,而是将它们保存到一个新的列表中,那会更好。毕竟我们处理数据之后希望可以方便整理和处理对吧。为此,我们将使用 append 函数。append 函数会将一个新项添加到现有列表的末尾。append 函数的一般形式是:
list_name.append(new_thing)
让我来解释一下:
list_name: 这是一个变量,表示你要操作的列表的名字。例如,如果你有一个列表 fruits = ['apple', 'banana', 'cherry'],那么 list_name 就是 fruits。
.(点操作符): 这是方法调用的语法,用于访问对象的属性或方法。在这里,它用于访问列表对象的 append 方法。
append:这是一个列表方法,用于在列表的末尾添加一个新的元素。append 方法会改变原列表,而不会返回新的列表。
(new_thing): 圆括号用于传递参数。在这里,new_thing 是你想添加到列表末尾的元素,可以是任何类型的对象(如字符串、数字、列表,甚至是另一个列表)。
举个例子大家就明白了:

好的,让我们回到目前的代码,我们可以学习添加一下这行代码,看看效果怎样?
substrate_concs = [1.0, 2.0, 3.0, 4.0, 6.0, 8.0, 10.0, 15.0, 20.0, 30.0, 50.0, 75.0, 100.0]
for number in substrate_concs:
V = Vmax * number / (Km + number)
velocities.append(V)
prt(velocitie
又报错了?NameError: name 'velocities' is not defined
这段代码无法运行,因为在循环的第一次迭代时,列表 velocities 不存在。要使其正常工作,我们必须在循环外开始创建这个列表。开始时列表可以是空的,但我们必须先创建它。
我们添加一个空的列表最开头velocities = []
成功!

运行到这里的小伙伴已经非常棒了,我们再坚持一下,最后一个部分是关于逻辑语句。
在你的代码中,你可能需要评估一个变量,然后如果变量具有特定的值就执行某些操作。这种逻辑由 if 语句处理。在以下示例中,我们只使用较低的底物浓度,就像我们在寻找Michaelis-Menten曲线的初始线性部分时所做的那样。作为一名生物化学家,你可能想要绘制数据以查看你想要找的目的数据。小亚老师之后会带大家绘图。
Km, Vmax = 15.0, 100.0
linear_MM = []
subtrate_concs = [1.0, 2.0, 3.0, 4.0, 6.0, 8.0, 10.0, 15.0, 20.0, 30.0, 50.0, 75.0, 100.0]
for number in substrate_concs:
if number < Km/4:
V_linear = Vmax * number / (Km + number)
linear_MM.append(V_linear)
print(linear_MM)
这段代码的功能是根据Michaelis-Menten方程计算特定条件下的酶动力学反应速度,并将结果存储在列表中。
布置一个作业!
下面这个列表里包含了一些浮点数和一些被保存为字符串的数字,大家可以先将这个列表精确地复制到自己的Notebook中。
conc_list = ['1.0', 2.0, 5.0, '14.0', 20.0]
现在希望大家首先设置一个 for 循环来遍历这个列表的每个元素。
然后需要进行判断与转换(上周课程有教大家怎么转换哦,还没有看的小伙伴可以再学习一下)。
如果判断元素是字符串(str),我们需要将其重新转换为浮点数(float)。
然后将所有的数字保存到一个名为 number_list 的新列表中。一定要注意代码的缩进哦!





沪公网安备 31011002003500