Python流程控制之while和for循环
while循环
- 用于编写通用迭代结构
- 顶端测试为真即会执行循环体,并会重复多次测试直到为假后,执行循环后的其他语句
for循环
- 一个通过的序列迭代器,用于遍历任何有序的序列对象内的元素
- 可用于字符串、元组、列表和其他的内置可迭代对象,以及通过类所创建的新对象
Python中也提供了一些能够进行隐形迭代的工具
- in成员关系测试
- 列表解析
- map、reduce和filter函数
while循环:
语法格式:
while boolean_expression:
while_suite
else:
else_suite
- else分支为可选部分
- 只要boolean_expression的结果为Ture,循环就会执行
- boolean_expression的结果为False时终止循环,此时如果有else分支,则会执行
举例:
print语句,后面加逗号,表示不换行打印
注意:
- break:跳出最内层的循环
- continue:跳到所处的最近层循环开始处
- pass:站位语句
- else代码块:循环正常终止才会执行,如果循环终止是由break跳出导致的,则else不会执行
练习1:逐一显示指定列表中的所有元素
count=0
while count<len(l1):
print l1[count]
count+=1
while l1:
print l1[0]
l1 = l1[1:]
while l1:
print l1[0]
l1.pop(0)
练习2:求100以内所有偶数之和
思路:除2取模
练习3:逐一显示指定字典的所有键,并于显示结束后说明总键数
d1 = {'x':1,'y':23,'z':78}
keylist = d1.keys()
while keylist:
print keylist[0]
keylist.pop(0)
else:
print len(d1)
练习4:创建一个包含了100以内所有奇数的列表
l1=[]
x=1
while x<100:
l1.append(x)
x+=2
else:
print l1
练习5:逆序逐一显示一个列表的所有元素
while l1:
print l1[-1]
l1.pop() //默认弹出最后一个元素
练习6:列表l1=[0,1,2,3,4,5,6],列表l2=[“Sun”,”Mon”,”Tue”,”Wed”,”Thu”,”Fri”,”Sat”],以第一个列表中的元素为键,以第二个列表中的元素为值,生成字典d1.
l1=[0,1,2,3,4,5,6]
l2=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]
d1={}
count=0
if len(l1)==len(l2):
while count<len(l1):
d1[l1[count]]=l2[count]
count+=1
else:
print d1
生成死循环:
while True:
for循环:
语法格式:
for expression in iterable:
for_suite
else:
else_suite
- expression或是一个单独的变量,或是一个变量序列,一般以元组的形式给出
- 如果以元组或列表用于expression,则其中的每个数据项都会拆分到表达式的项
如,逐一显示指定列表中所有元素
for x in "dashuifeng":
print x
- for循环比while循环执行速度快
- Python提供了两个内置函数,用于在for循环中定制特殊的循环:
range或xrange:
- range:一次性地返回连续的整数列表
- xrange:一次产生一个数据元素,相较于range更节约空间
zip:
- 返回并行的元素元组的列表,常用于在for循环中遍历数个序列,如:
- zip也常用于动态构造字典
练习1、逐一分开显示指定字典d1中的所有元素,类似如下:
k1 v1
k2 v2
…
for (k,v) in d1.items():
print k,v
练习2、逐一显示列表中l1=[1,2,3,4,5,6,7,8]中的索引为奇数的元素
for i in range(1,len(l1),2):
print l1[i]
练习3、将属于列表l1=[1,2,3,4,5,6,7],但不属于列表l2=[1,2,3,5,7]的所有元素定义为一个新列表l3
l3=[]
for i in l1:
if i not in l2:
l3.append(i)
练习4、已知列表namelist=[1,2,3,4,5,6,7],删除列表removelist=[3,7,9],请将属于removelis列表中的每个元素从namelist中移除(属于removelist,但不属于namelist的忽略即可)
for i in removelist:
if i in namelist:
namelist.remove(i)
总结:
1、动态语言
sys.getrefcont()
- 增加对象的引用计数场景:
- 对象创建时
- 将对象添加进容器时:类似list.append()
- 当对象被当做参数传递给函数时
- 为对象创建另外变量名
- 减少引用计数:
- 引用此对象的某变量名被显示销毁:del()
- 给引用此对象的某变量名重新赋值
- 从容器中移除对象时,类似list.pop()
- 容器本身被销毁
2、if
if boolean_expression1:
...
elif boolean_expression2:
...
...
else:
...
3、while
while boolean_expression1:
while_suite
if boolean_expression2:continue
if boolean_expression3:break
else:
else_suite
4、for
for expression in object:
for_suite
if boolean_expression2:continue
if boolean_expression3:break
else:
else_suite
小例子:
输入若干内容,作为列表元素,知道输入q或quit退出
test=[]
while True:
x=raw_input('Enter an entry:')
if x=='q' or x=='quit':
break
else:
test.append(x)