大 热҈热҈热 天最适合在家学习python啦。这里是python学习笔记第四篇。
热点推荐
如果还没有安装入门环境首选 pycharm
,可以参见 三剑客 PyCharm 小试。
学习编程语言的起点绕不过语法基础,快速掌握规范代码可以参见 手把手带你学 Python3 | 编程基础与规范代码。
上一期我们罗列了列表的几种用法,切片及截取都是非常常规的用法,在后面的使用中会经常碰到,建议经常查看哟。
本期学习笔记,我们将来介绍元组:
元组定义
元组和我们上一期讲的列表很接近,只是元组定义了以后,包含的元素就不能修改,一般使用tuple = (obj,)
来表示。且在计算过程中,元组的处理将比列表要快。
因此,如果要修改元组,我们只能通过变量进行重新赋值,不能进行元素的增删,否则会报错。
除了与列表类似的处理索引、截取、计算元组个数、最大值、最小值、长度、删除元组外,
len(tuple)
tuple.count(obj)
max(tuple)
min(tuple)
元组也有自己的函数,比如:
1. 列表变元组,大家可以使用type()
函数查看类型:
tuple('DNA')
tuple(['DNA','RNA','AA','peptide'])
2. 元组拼接,比较一下以下两种不同的方法所获得元组:
tuple1 = ('DNA'), (['DNA','RNA','AA','peptide'])
tuple2 =('DNA') + (['DNA','RNA','AA','peptide'])
3. 元组拆包
既然元组不能改变,因此可以把里面的值一对一的对应不同的变量,这个过程就称为拆包。举个例子:
tuple = ('DNA','RNA','AA','peptide')
D, R, A, P = ('DNA','RNA','AA','peptide')
D, _, A, P = ('DNA','RNA','AA','peptide')
D, R, *rest = ('DNA','RNA','AA','peptide')
D, *_, P = ('DNA','RNA','AA','peptide')
备注1:变量的个数要与元组中包含的元素数量一致,不然会有报错。
ValueError: too many values to unpack (expected 2)
备注2:嵌套元组也是可以对应拆包的,比如大家可以尝试其贴入 pycharm中,然后输出各个变量看看对应的值。
D, R, (A, P) ='DNA','RNA',('AA','peptide')
小测试
这里贴一个选择题,大家可以将答案发在留言区,验证一下是否掌握了以上的概念~
?请问以下那边变量是元组类型:
a = (1)
b = [1]
c = ()
d = (1,1)
e = (1,[1,1])
f = (l,)
小测序2
既然元组具有不可变性及拆包,且存储空间小于列表,是否可以构建一个元组用于fa文件id与序列的一一对应,我们用以下测试文件:
less test.txt
>hsa_circ_00001
GTCCCACCCGAAAGATGCCCCCCAGCGCCAGTGCCGTGGACTTCTTCCAGCTCTTTGTCCCAGACAACGTCCTCAAGAACATGGTGGTGCAGACAAACATGTATGCCAAGAAGTTCCAGGAGCGGTTTGGGAGCGACGGAGCCTGGGTGGAGGTGACGCTGACGGAGATGAAGGCGTTCCTGGGCTACATGATCTCCACCAGCATCTCCCACTGCGAGTCCGTCCTCAGCATCTGGAGCGGAGGCTTCTACAGCAACCGCAGCCTCGCCCTCGTCATGAGCCAGGCCCGCTTCGAGAAGATCCTCAAGTACTTCCACGTCGTGGCCTTCCGCTCCAGCCAGACCACGCACGGGCTCTACAAGGTCCAGCCCTTCCTCGACTCCCTGCAGAACAGCTTCGACTCTGCCTTCAGGCCTTCCCAAACCCAGGTGCTACATGAACCCCTGATCGATGAGGATCCTGTATTCATTGCCACGTGCACAGAGCGGGAGCTGCGAAAGAGGAAAAAGCGGAAATTCAGCCTCTGGGTCAGACAATGTTCTTCCACTGGCTTCATCATCCAG
>hsa_circ_00002
GAAATTATCAGTTCATTGCCTAGCATAGTAAATGACAAATATGGAAGGAAGGTCCTATTGTACTTACTAAGCCCCAGAGATCCTGCACATACAGTACGAGAAATCATTGAAGTTCTGCAAAAAGGAGATGGAAATGCACACAGTAAGAAAGATACAGAGGTCCGCAGACGGGAGCTCCTAGAATCCATTTCTCCAGCTTTGTTAAGCTACCTGCAAGAACACGCCCAAGAAGTGGTGCTAGATAAGTCTGCGTGTGTGTTGGTGTCTGACATTCTGGGATCTGCCACTGGAGACGTTCAGCCTACCATGAATGCCATCGCCAGCTTGGCAGCAACAGGACTGCATCCTGGTGGCAAGGACGGAGAGCTTCACATTGCAGAACATCCTGCAGGACATCTAGTTCTGAAGTGGTTAATAGAGCAAGATAAAAAGATGAAAGAAAATGGGAGAGAAGGTTGTTTTGCAAAAACACTTGTAGAGCATGTTGGTATGAAGAACCTGAAGTCCTGGGCTAGTGTAAATCGAGGTGCCATTATTCTTTCTAGCCTCCTCCAGAGTTGTGACCTGGAAGTTGCAAACAAAGTCAAAGCTGCACTGAAAAGCTTGATTCCTACATTGGAAAAAACCAAAAGCACCAGCAAAGGAATAGAAATTCTACTTGAAAAACTGAGCACATAGGTGGAAAGAGTTAAGAGCAAGATGGAATGATTTTTTCTGTTCTCTGTTCTGTTTCCCAATGCAGAAAAGAAGGG
>hsa_circ_00003
ATGCCGAATATACCAACTCTCCTTTGGTACCTACATTCTGTACTCCTGGTTTGAAAATTCCATCTACAAAGAACAGCATAGCTTTG
>hsa_circ_00004
GTTTTACAAGATGAATTAGAAAACCGTTCTAATCAGGTGCGATGTGCAGAGAAAAAATTACAACACAAAGAATTGGAGTCACAGGAACAGATAACTTACATACGACAAGAATATGAAACAAAATTGAAAGGATTGATGCCAGCATCCCTAAGACAAGAACTTGAAGACACCATTTCCTCCCTAAAATCACAGGTTAATTTTCTGCAAAAGAGAGCTTCCATCCTTCAGGAAGAACTGACTACATATCAAGGCAGAAG
>hsa_circ_00005
ACACCATCCAGCACATGAGAGACAGCAAGCACATCGTCGTGTACCATCGAGGACGCTACTTCAAGGTCTGGCTCTACCATGATGGGCGGCTGCTGAAGCCCCGGGAGATGGAGCAGCAGATGCAGAGGATCCTGGACAATACCTCGGAGCCTCAGCCCGGGGAGGCCAGGCTGGCAGCCCTCACCGCAGGAGACAG
思路就是通过读文件将fa文件拆成两部分,然后构建元组拆包,实现ID对应序列查找:
import os
os.chdir('C:\\Users\\user\\desktop')
f = open('test.fa','rt')
f = f.readlines()
list_id = []
list_seq = []
for l in f:
l = l.strip('\n')
if l.startswith('>'):
l = l.strip('>')
l = vars(l)
list_id.append(l)
else:
list_seq.append(l)
print(list_id)
Traceback (most recent call last):
File "C:/Users/user/Desktop/tuple_test.py"
, line 13, in
l = vars(l)
TypeError: vars() argument must have __dict__ attribute
# 如果要定义变量要使用字典的
# 原思路实现拆包的类型如下,但是目前来说构建的ID无法转换为变量,因此拆包失败
hsa_circ_00001, hsa_circ_00002, hsa_circ_00003, hsa_circ_00004, hsa_circ_00005 = tuple(list_seq)
print(hsa_circ_00001)
GTCCCACCCGAAAGATGCCCCCCAGCGCCAGTGCCGTGGACTTCTTCCAGCTCTTTGTCCCAGACAACGTCCTCAAGAACATGGTGGTGCAGACAAACATGTATGCCAAGAAGTTCCAGGAGCGGTTTGGGAGCGACGGAGCCTGGGTGGAGGTGACGCTGACGGAGATGAAGGCGTTCCTGGGCTACATGATCTCCACCAGCATCTCCCACTGCGAGTCCGTCCTCAGCATCTGGAGCGGAGGCTTCTACAGCAACCGCAGCCTCGCCCTCGTCATGAGCCAGGCCCGCTTCGAGAAGATCCTCAAGTACTTCCACGTCGTGGCCTTCCGCTCCAGCCAGACCACGCACGGGCTCTACAAGGTCCAGCCCTTCCTCGACTCCCTGCAGAACAGCTTCGACTCTGCCTTCAGGCCTTCCCAAACCCAGGTGCTACATGAACCCCTGATCGATGAGGATCCTGTATTCATTGCCACGTGCACAGAGCGGGAGCTGCGAAAGAGGAAAAAGCGGAAATTCAGCCTCTGGGTCAGACAATGTTCTTCCACTGGCTTCATCATCCAG
Process finished with exit code 0
(阵亡)。上述的不成功案例在shell里可以用一句代码实现:
$ grep hsa_circ_00001 -A 1 test.fa
>hsa_circ_00001
GTCCCACCCGAAAGATGCCCCCCAGCGCCAGTGCCGTGGACTTCTTCCAGCTCTTTGTCCCAGACAACGTCCTCAAGAACATGGTGGTGCAGACAAACATGTATGCCAAGAAGTTCCAGGAGCGGTTTGGGAGCGACGGAGCCTGGGTGGAGGTGACGCTGACGGAGATGAAGGCGTTCCTGGGCTACATGATCTCCACCAGCATCTCCCACTGCGAGTCCGTCCTCAGCATCTGGAGCGGAGGCTTCTACAGCAACCGCAGCCTCGCCCTCGTCATGAGCCAGGCCCGCTTCGAGAAGATCCTCAAGTACTTCCACGTCGTGGCCTTCCGCTCCAGCCAGACCACGCACGGGCTCTACAAGGTCCAGCCCTTCCTCGACTCCCTGCAGAACAGCTTCGACTCTGCCTTCAGGCCTTCCCAAACCCAGGTGCTACATGAACCCCTGATCGATGAGGATCCTGTATTCATTGCCACGTGCACAGAGCGGGAGCTGCGAAAGAGGAAAAAGCGGAAATTCAGCCTCTGGGTCAGACAATGTTCTTCCACTGGCTTCATCATCCAG
关于shell的小技巧,推荐食用这篇文档~
Shell文本处理三剑客的使用小技巧
当然上述的报错也不是不可以解决的,只是要使用另一个数据类型 字典来操作,我们下期见。
小结
总体下来,list和tuple最大的差别就在于 Immutable上,这就带了更多安全性及性能优化,列表是相同类型的项目列表:文件,名称,对象,元组是不同类型对象的分组。如果进阶,还需多多实战,感受其中的魅力。如果有兴趣,可以搜搜 具名元组 的使用。
对啦,如果这篇推文对你有一点点的帮助,也请大家把点点 在看 动动小手 分享 给身边的小伙伴,如果有任何疑问都欢迎在留言区与我联系,你的反馈是我们写文莫大的动力,谢谢大噶:)
▼ 如果你生信基本技能已经入门,需要提高自己,请关注下面的生信技能树,看我们是如何完善生信技能,成为一个生信全栈工程师。

▼ 如果你是初学者,请关注下面的生信菜鸟团,了解生信基础名词,概念,扎实的打好基础,争取早日入门。

猜你喜欢:
【热҈热】三剑客 PyCharm 小试
【热҈】编程基础与规范代码
Shell文本处理三剑客使用小技巧 |awk grep sed +正则表达式
青蒿素科普贴
2019年五篇Cell文献阅读集锦
circRNA实验新更 - circRNA实验设计优化方案笔记