Python如何计算序列长度

Python018

Python如何计算序列长度,第1张

根据你之前的问题,假定你的数据符合这种格式:

>SeqName1

Seq1

>SeqName2

Seq2

...

这里不要求Seq1只占一行(即允许其中有换行符出现)。假如Seq总是只占一行的话,其实就是奇数行是名字,偶数行是序列本体而已,读取不要太简单……

以下是简单的实现。考虑到文件可能很大,使用迭代来逐个读入数据。文件较小的情况可以使用列表表达式直接实现- -。

遍历文件时的流程:

如当前行以'>'开始,将其存为k(序列名称),直到发现下一个序列名称为止的所有行,填入v(序列)。再次发现'>'开始的行时,将(k, v)存入字典,并将v清空。此外的是实现细节。注释之后太啰嗦了,对哪里有疑问请追问。

fileFa = open("SEQ.FASTA", "r")

dic, k, v = {}, '', []

for i in fileFa:

    if i.startswith('>'): 

        dic[k] = v 

        k = i[1:-1] 

        v = []

    else:

        v.append(i)

dic[k] = v

dic.pop('')

print "%s sequences in total" % len(dic)

for (k, v) in dic.items():

    print("SEQUENCE: %s\nLENGTH:%s" % (k, sum(map(len, v))))

使用你上一问题提供的4个序列,输出如下:

4 sequences in total

SEQUENCE: qwe56_44514

LENGTH:98

SEQUENCE: qwe56_44606

LENGTH:82

SEQUENCE: qwe56_44424

LENGTH:43

SEQUENCE: qwe56_869

LENGTH:39

Python 中的序列是一块可存放多个值的连续内存空间,所有值按一定顺序排列,每个值所在位置都有一个编号,称其为索引,我们可以通过索引访问其对应值。

其实字符串就是序列结构,除此之外常见的序列结构还包括列表、元组等。

序列索引支持非负数和负数, 索引为非负数,从 0 开始 ,如下所示

以字符串为例,如下所示:

输出结果:

从结果来看,我们使用非负数索引与负数索引得到的结果一致。

切片操作可以访问一定范围内的元素,语法如下所示:

以字符串为例,如下所示:

输出结果:

Python 支持类型相同的序列使用 + 作相加操作,该操作不会去除重复的元素。以字符串为例,如下所示:

输出结果:

Python 中,使用数字 n 乘以一个序列会生成新的序列,内容为原来序列被重复 n 次的结果。以字符串为例,如下所示:

输出结果:

Python 使用 in 关键字检查某元素是否为序列的成员,语法如下:

val in seq

以字符串为例,如下所示:

输出结果:

True

2.6 内置函数

len()—— 计算序列的长度

max()——找出序列中的最大元素

min()——找出序列中的最小元素

list() ——将序列转换为列表

str() ——将序列转换为字符串

sum()——计算元素的和

sorted()——对元素进行排序

enumerate()——将序列组合为一个索引序列,多用在 for 循环中

举例,如下所示:

输出结果:

首先,找规律:

(2 1) (4 3) (6 5) (8 7) ..

发现是每个偶数i与i-1互换位置,或者说:奇数加1,偶数减1。如此一来可以用列表表达式生成(假设长度为n):

[i-1 if i % 2 == 0 else i+1 for i in range(1, n+1)]