for循环的使用
Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串。如果不能意会"遍历"的意思,那我们用具体的实例来说明:
list=['Python','2018','June']
foriinlist:
print(i)
output:
此处的 i 在for循环是一个指代list元素的变量,不需要提前定义,一般你可以根据自己的习惯任意命名一个变量来替代 i ,但最终行使的功能都是一样的。这也是Python的方便之处。所以如果你在for循环外面print(i),则会出现报错,因为变量 i 没有定义。自己可以试试看,我这里就不啰嗦了。
上面是以List为例举例,同样String,Tuple,Dictionary和Set也可以进行for循环的遍历每个元素。这里以String和Dictionary为例,进行列举,其他自行测试。
str='Python'
foriinstr:
print(i)
dict={'A':'Python','B':'2018','C':'June'}
forkey,valueindict.items():#这里需要注意items()的用法
print(key,value)
output:
这里需要提一下,Dictionary的for循环使用方法,需要用到它的自带函数items(),在介绍Python的数据类型时有提到,如果有需要,可以返回复习一下(
Python入门:Python 3的六个标准的数据类型(四)
),里面用到的内容非常齐全,建议收藏。
for循环的语法格式如下:
注:这里的iterable是可迭代对象,可以直接作用于for循环的数据类型有以下几种:一类是除了Number外的其他五种数据类型,我刚在前面提到了,如list、tuple、dict、set、str 等;另一类是generator,包括生成器和带yield 的generator function,后面会讲到,这里不做阐述。
for循环的用法非常多,且常见,所以务必掌握它的用法。还记得九九乘法表要怎么用Python完成吗?这里写两种做法。
菜鸟做法:
foriinrange(1,10):
forjinrange(1,10):
print('{} * {} = {}'.format(i,j,i*j))
output:
.......
乍一看没什么毛病,但是一细看这种写法太过冗余,如果有教科书的那种感觉就好了。当然可以做到,只需要稍早改变即可。
看看高手的写法,教科书级别的:
foriinrange(1,10):
forjinrange(1,i+1):
print('{ } * { } = { }\t'.format(i,j,i*j),end='')
#通过指定end参数的值,可以取消在末尾输出回车符,实现不换行。
print()
#九九乘法表需要一个多行多列的效果,所以需要换行,
#可以用一个空print消掉end来实现
output:
今天就整理这些,明天继续,接下来我们做一下习题。习题内容来自Jimmy的生信技能树论坛的菜鸟Python练习,习题非常不错,直接用的上的是生信分析相关的,便于上手。今天直接做习题一,链接见下:
第一次做这些习题,你可能有些不熟悉情况,我这里详细说一些,将做题流程说一下。后面再做习题就不会说这么详细了。
第一步,进入论坛找到题目,点击标红的链接。
第二步,看题目,下载文件。
第三步,提交答案。
这是流程,如果自己不会做或者觉得做的不够好,要怎么办?回到生信技能树论坛,这里有高手的教科书级别的代码,也有跟我一样的菜鸟。好好跟着学。
好了,来看一下文件:
txt文件里是一些碱基数目,作业是统计文件中四种碱基的数目(Four integers (separated by spaces) counting the respective number of times that the symbols 'A', 'C', 'G', and 'T' occur inss.)。
菜鸟做法:
print('方法一:笨方法完成文档中碱基数的计算')
withopen(r'F:\miniconda\test\biotree_files\rosalind_dna.txt',
'r')ass:
b=s.readline().rstrip()
A=
T=
C=
G=
foriinb:
ifi=='A':
A+=1
ifi=='T':
T+=1
ifi=='C':
C+=1
ifi=='G':
G+=1
print(A,C,G,T)
output:
PS:这个方法一眼看过去没毛病,但是如果出现文档中有小写的碱基,那么在上述的统计过程中是无法被考虑到的。当然这个文件没有问题,但是对于处理比较大的文件,你不能保证是不是有小写的情况,所以再做此类题的时候,不光要考虑去空格,还要考虑大小写的问题。
代码的写法有很多种,每个人看到的一套题的想法和入手点也不一样。刚开始的阶段,所以你不需要必须写成怎样。等到学到一定程度,再想着精简和完善你的代码。所以一边按照自己的方法写,写完了再跟高手写的对比,学习,再尝试高手的思维来写,下次使用中就可以用的到。
生物技能树给的高级做法:
print('方法二:高阶方法完成文档中碱基数的计算')
seq=''
ntCounter=[]
withopen(r'F:\miniconda\test\biotree_files\rosalind_dna.txt',
'r')ass:
forlineins:
line=line.rstrip()
#去rstip()删除string字符串末尾的指定字符(默认为空格)
seq=seq+line.upper()
#将去空格的line中的每个碱基大写。
#此处应区分upper()和capitalize()的用法
forntin['A','C','G','T']:
ntCounter.append(seq.count(nt))
print('\t'.join(map(str,ntCounter)))
注:map()属于高级函数,后面会讲到。如果这个代码看的不大懂,看我在下面写到的第三条。
output:
这里需要提到上面习题中涉及的四点内容:
1、open()打开文件时,会使用到“\”特殊符号,有\t,\r,\n等情况,会发生转义,但是我们并不想使用这些转义符号,而是用它原始的含义,这种情况的解决方法其实前面有提到过(Python入门:Python 3的六个标准的数据类型(一))。
举例说明:
withopen('F:\miniconda\test\biotree_files\rosalind_dna.txt',
'r')ass:
加 ‘r’:
withopen(r'F:\miniconda\test\biotree_files\rosalind_dna.txt',
'r')ass:
2、当引号里出现引号时,怎么做才不出现转义?
print('times of the symbols 'A', 'C', 'G', and 'T' occur in s.')
上面的代码因为引号的互相搭配出现错义。一般有两种做法可以解决上述问题:
一种是,如果只使用一种引号,需要在内部的所有引号前加上‘\’进行转义:
print('times of the symbols\'A\',\'C\',\'G\', and\'T\'
occur in s.')
另一种是使用两种引号,即单双引号加以区分:
print("times of the symbols 'A', 'C', 'G', and 'T' occur in s.")
3、高阶版的做法如果看的不是很明白,可以看一下下面这个代码,帮助理解一下:
L=[2,3,1,3,5,3,1,3,5,1,2,3,1,2,3]
num_times=[]
forjin[1,2,3,5]:
P=L.count(j)
num_times.append(P)
print(num_times)
output:
这里是统计列表L中1,2,3,5出现的次数,利用for循环和List的count()和append()函数实现的。这些函数在Python入门:Python 3的六个标准的数据类型(二)中有详细列举。
4、String字母大小写的用法有四种:
str.upper()字符串中字母由小写变为大写
str.lower()字符串中字母由大写变为小写
str.capitalize()字符串中字母首字母大写其余小写
str.title()字符串中字母每个单词的首字母大写其余小写
举例说明:
a="hello"
b="WORLD"
c="hello"
d="hello world"
print(a.upper())
print(b.lower())
print(c.capitalize())
print(d.title())
output:
今天整理这些,明天继续!
欢迎关注!
领取专属 10元无门槛券
私享最新 技术干货