美文网首页用Python做生信
确定蛋白浓度(三)|自学生信Python(第二十三天)

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

作者: 天明豆豆 | 来源:发表于2019-12-25 06:04 被阅读0次

    确定蛋白浓度(三)

    前面两篇文章已经介绍和讲解了问题答案代码的部分含义,下面将进行后续的讲解。(建议结合前面两篇文章阅读)

    插入和删除行
    在计算 Lowry 的数据时,必须首先去掉标签行。 由于该表存储为一个列表,可以使用所有列表支持的操作。 通过切片操作删去整个第一行,即保留除第一个元素以外所有其他元素 :

    table = table[1:]

    或者,可以使用 pop()方法:

    table.pop(0)

    记住,索引从 0 开始。 同样也可以删除任何其他行,如第三行

    table.pop(2)

    或者用切片 :

    table = table[:2] + table[3:]
    类似地,还可以使用列表功能在给定的位置插入新行:

    table.insert(2, [0.55,0.123,0.122,0.145])

    或者可以在末尾添加一个新行:

    table.append([0.55,0.123,0.122,0.145])

    表的添加和删除用一行代码就可以完成。

    访问列

    嵌套列表方法的缺点是,访问列不那么简单直接,因为一列的数据分布在所有行中。 当然,可以在表上运行一个循环来收集一列的所有数据:
    protein = []
    for row in table:
    protein.append(row[])

    如果想用这种方法提取多列或访问相同的列多次,程序将变得很长,难以阅读。 在 Python 中可以使用更有效的缩写 :
    protein,ext1,ext2,ext3 = zip(table)
    zip(
    table) 命令把每一列转换为单个元组变量,从而有效地将表旋转 90°。 此操作虽然语法很短,但需要用一些时间来才能完成。 因此对于大数据集,用 for()循环可能会更好。

    合并多列

    四个列都被存储在单独变量中(含有列表或元组)之后,需要把它们组合成一个两列的 表(见表 7.2) 。

    加号(+)和乘法(*)运算符在 Python 中可以分别应用于列表和元组的合并和乘法。 乘法通过复制来扩展列表:

    protein = protein* 3

    这会导致同样的数据出现三个相连的副本 :

    >>> [1,2,3] * 3 
    [1, 2,3,1,2,3,1,2,3] 
    

    加法将两个或多个列表或元组连接为一个:

    >>> [1,2,3] + [4,5,6] 
    [1,2,3,4,5,6] 
    

    其结果是包含所有数据项的一个列表或元组,一个后面跟着另一个:
    extinction = ext1+ ext2 + ext3

    在前面的程序中,这些行的结果是通过将这三列消光值合并成一个单一的列,蛋白质列中的信息增加到原来的三倍,以包含相应的值。

    问答: 如果将包含不同的数据类型的列表组合在一起会怎样? Python 并不关心乘用" 长 "运算符或连接用 " + "操作符所计算列表的内容。 例如可以轻 松地创建首先包含数字之后是字符串的列表。 但是,当要对列表中所有元素使用 for 循环或 类似 sumO这样的函数时,不同的数据类型会导致问题。如果觉得嵌套列表结构不足以达到 目的,可以考虑使用嵌套字典(见例 7. 2)或类。

    zip( )函数

    内置的 zip()函数和星号究竟如何工作? zip()命令可以将两个或多个列表中的元素一 个接一个地相结合,如

    >>> zip( [1,2,3), [4,5,6]) 
    [(1,4),(2,5),(3,6)]
    

    其结果是,每个输入列表中的第一个元素配对在一起,然后是第二个元素,以此类推。 zip()函数的参数必须是可迭代的(列表,元组,字符串) 。 它返回的结果是一个包含数个元组的列表,其中第 i 个元组包含来自每个参数的第 i 个元素。 例如,前面文章代码中星号告诉 zip 函数使用嵌套列表中的所有列表作为参数,可以写为

    zip (*table)

    即,

    zip (table [0],table [1],table [2],table [3])

    将 zip() 函数的参数看成一张表中的行,zip (*table)符号将表旋转 90° :

    >>> data = [[1,2,3],[4,5,6]]
    >>> zip (*data) 
    [(1,4),(2,5),(3,6)]
    

    总之, zip() 函数像拉链一样将列表中的各项配对,符号将所给的变量解释为每行都是参数组成的一列。zip()的一个很常见的用法是旋转(或转置)表*,这使得访 问表中的列更为轻松。

    插入和删除列

    zip() 函数可以 90°旋转表 :

    table = zip (*table)

    有了这一招,就可以像对行一样对列进行访问、插入、删除。 例如,需插入一列就要先转置表,插入一行,最后再将表转置回来 :

    table =zip(table)
    table.append(['ext4',0,0,0,0,0,0])
    table = zip(
    table)

    该代码添加一个额外的第一行带标签的全零列。 如果想从一个表中删除一列,可以使用同样的方法:

    table =zip(table)
    table.pop(1)
    table = zip(
    table)

    以上代码消除了整个第二列,但这种方法有一个小缺点, zip(*table)操作将其中的列表变 为了元组。 正如以前所述,元组是不可变的。 这意味着用了 zip()之后,不能再对单个单元格进行操作。需要将行再次转换为列表:

    table [1] = list (table [1])
    table [1][2] = 0.123

    用这两行指令可更改 zip(*table)后的单个单元格的值。 图 7. 2 总结了可对表使用的 指令。

    相关文章

      网友评论

        本文标题:确定蛋白浓度(三)|自学生信Python(第二十三天)

        本文链接:https://www.haomeiwen.com/subject/rpknnctx.html