用Python做生信Python

确定蛋白浓度(二)|自学生信Python(第二十二天)

2019-12-23  本文已影响0人  天明豆豆

确定蛋白浓度(二)

问题回顾:如何将原始数据表(表 7. 1)转换为更简单的表(表 7.2)?

在下面的 Python 会话中,会对初始表,即包含数个列表的列表执行一些操作步骤,将一个新函数zip() 使用两次:第一次,将表调转了 90° ,第二次,组合表中的两列以获得一个新的二维表。
其参考代码如下:

table = [
    ['protein','ext1','ext2','ext3'],
    [0.16,0.038,0.044,0.040],
    [0.33,0.089,0.095,0.091],
    [0.66,0.184,0.191,0.191],
    [1.00,0.280,0.292,0.283],
    [1.32,0.365,0.367,0.365],
    [1.66,0.441,0.443,0.444]

]
table = table[1:]
protein,ext1,ext2,ext3 = zip(*table)
extinction = ext1+ext2+ext3
protein = protein*3
table =zip(protein,extinction)
for prot,ext in table:
    print(prot,ext)

输出结果为:


命令的含义

启动该程序,会打印转化为双列格式的表格。 程序分为两部分。 在顶部,数据写成嵌套其他列表的列表格式。 使用这种嵌套列表,该程序就能清晰地表示二维数据。 在底部,该转换由 5 个步骤完成。
①首先,删除标签行(table = table[1:]);
②其次,创建四个元组, 每个包含一列数据(protein, ext1, ext2, ext3 = zip( table));
③第三,将消光值列复制到一个元 组(extinction = ext1 + ext2 +ext3),并将蛋白质列相应地延长 (protein = protein
3) 。 这里,蛋白质元组乘以 3. 使相同的值重复三次,因为在上表中一个蛋白质对应三个消光值;
④第四,两列组合成一个新的二维表(table = zip(protein, extinction) );
⑤最后,将表的内容 逐行打印,
其结果是含有蛋白质的浓度和相应的消光值对的嵌套列表。

二维表的表示方法

我们先从含有一列蛋白质浓度和三列消光值的表开始(见表 7.1)。table 变量的类型是包含其他列表的列表。 任何表可以被编码为含有列表的列表,也称为嵌套列表。 例如,表

可以编码为嵌套列表
square = [[1,2,3] , [4,5,6] , [7,8,9]]

或嵌套元组的列表

square = [(1,2,3) , (4,5,6) , ( 7,8,9 )]

Python列表可以保存所有类型的数据,也包括其他列表。 在由嵌套列表表示的表中,有一个单一的外列表(包含内部的行〉和内列表(一行一个) .外列表包含内列表,这样表就有了清晰的结构。 此嵌套列表结构又称为二维阵列

问答: 能否使用 python三维表?
能有多少列表相互嵌套并没有限制 。 例如,可以创建一个 2x2x2 元素的三维列表如下:
cube = [[[0,1],[2, 3]],[[4,5], [6,7]]]

三维表创建后,数据规模可能很快就会变得非常巨大(例如,如果表在每个维度有 100 个位 置,那么将是 100^3或 10^6个单元格的表)。有了这样的数量级 , 程序很容易变得非常慢,除非能使用复杂的算法并有大量的内存和/或功能强大的计算机。有一条经验法则是, 当数据越多时,就越必须提前计划。 当数据变得更复杂时,用像[1][2][3]这样的索引访 问列表就会十分复杂低效,这时类可以使数据更具有可读性。

访问行和单元格

将表格表示为嵌套列表后,可以通过索引访问各行,以同样的方式也可以访问任何列表。 例如,访问第二行可以用如下指令(索引从 0 开始) :

second_row = table[1]

通过添加表示列数的第二个索引,可以访问单元格。例如,第二行的第三列中的单元可以这样访问:
second_row_third_column = table [1][2]

或者,如果要操作数据, 则可以把它赋给指定单元格:

table [1][2] = 0.123

用单个 for 循环,可以对表中的所有行进行操作 :
for row in table:
print(row)

用 for 双循环,可以依次访问各行的每个单元格 :

for row in table:
for cell in row:
print(cell)
在 Python 的嵌套列表中,访问行和单元格是最简单的操作。后面将讨论稍复杂的访问列操作。

日常结尾:
虽然这是个小小的计算程序,但对于初学者的我来说每一次对原代码的升级改造,哪怕是读懂后的注释都感觉是一次进步提升,总之代码虽小,动手最重要!希望更多学习Python的爱好者不要像我一样眼高手低,学习编程就是要,思考,敲码,思考,敲码,敲码,再敲码!!

上一篇下一篇

猜你喜欢

热点阅读