一、条件和循环
1. if语句
if <条件判断1>: <执行1> elif <条件判断2>: <执行2> else: <执行4>
例如:
age=5 if age>=18: print 'adult' elif age>=6: print 'teenager' else: print 'kid'
一定要注意条件语句结尾的冒号,以及代码段的缩进。
只要if参数是非零数值、非空字符串、非空list等,就判断为True
,否则为False
。
2.循环
range(num):返回0到num-1之间的整数。例如:
print range(5) >>>[0,1,2,3,4]
for循环:for x in ...
循环就是把每个元素代入变量x
,然后执行缩进块的语句。
s=0 for i in range(101): s+=i print s
while循环:只要条件满足,就不断循环,条件不满足时退出循环。
i=1 s=0 while(i<=100): s=s+i i=i+1 print s
3.迭代
dict类型for ..in ..迭代有以下几种方式:
d={'a':1,'b':2,'c':3}
默认迭代key
for k in d: print k
iterkeys()返回key迭代器
for key in d.iterkeys(): print key
itervalues()返回value迭代器
for value in d.itervalues(): print value
iteritems()返回键值对迭代器
for key,value in d.iteritems(): print key+"="+str(value)
判断对象是否可迭代:通过collections模块的Iterable类型判断
from collections import Iterable print isinstance(d,Iterable)
带下标迭代:Python内置的enumerate函数可以把一个list变成索引-元素对
l=range(5) for i,value in enumerate(l): print i,value
二、生成式
1.列表生成式
列表生成式是python受欢迎的语法之一,通过一句简洁的语法就可以对一组元素进行过滤,还可以对得到的元素进行转换处理。语法格式为:
[exp for val in collection if condition]
相当于
result=[] for val in collection: if(condition): result.append(exp)
我们看个例子:将列表中的字符串转换为小写组成新的列表。
L=['Hello',10,'World',None] print [s.lower() for s in L if isinstance(s,str)] 运行结果: ['hello', 'world']
2.字典生成式
字典生成式基本格式如下:
{key-exp:val-exp for value in collection if condition}
例如:
print {i:i*10 for i in range(1,10) if(i%2==0)} 运行结果为: {8: 80, 2: 20, 4: 40, 6: 60}
3.集合生成式
集合生成式格式和列表生成式类似,只不过用的是大括号:
{exp for value in collection if condition}
例如:统计列表中字符串元素的各种长度。
L=['Hello',10,'World',None,'aa'] print {len(x) for x in L if isinstance(x,str)} 运行结果: set([2, 5])
4.嵌套列表生成式
嵌套列表生成式要注意for循环的顺序。
例如:我们想提取由两个列表组成的嵌套列表中,含有a的字符串:
L1=[['Cathy','Li'],['Zhang','Wang','Mike','Tom','Jack']] print [name for list in L1 for name in list if name.count('a')>0] 运行结果: ['Cathy', 'Zhang', 'Wang', 'Jack']
我们还可以将嵌套列表中的数据进行扁平化展现,例如:
L2=[(1,3,5),(2,4,6),(100,200)] print [value for t in L2 for value in t] 运行结果: [1, 3, 5, 2, 4, 6, 100, 200]
发现语法太简洁啦!!
三、生成器
在Python中,有一种自定义迭代器的方式,称为生成器(Generator)。
定义生成器的两种方式:
1.创建一个generator,只要把一个列表生成式的[]
改成()
,就创建了一个generator:
l=[x for x in range(1,10)] print l g=(x for x in range(1,10)) print g.next() print g.next() for x in g: print x 运行结果: [1, 2, 3, 4, 5, 6, 7, 8, 9] 1 2 3 4 5 6 7 8 9
generator保存的是算法,每次调用next()
,就计算出下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。
2.定义generator的另一种方法。如果一个函数定义中包含yield
关键字,那么这个函数就不再是一个普通函数,而是一个generator:
def fib(n): a=1 b=1 i=0; yield a yield b while(i<n): a,b=b,a+b i+=1 yield b for x in fib(10): print x 运行结果: 1 1 2 3 5 8 13 21 34 55 89 144
生成器和普通函数区别:
普通函数是顺序执行,遇到return语句或者最后一行函数语句就返回;
而变成generator的函数,在每次调用next()
的时候执行,遇到yield
语句返回,再次执行时从上次返回的yield
语句处继续执行。
def test(): print 1 yield print 2 yield print 3 yield t=test() t.next()#运行结果1 t.next()#运行结果2 t.next()#运行结果3