1 while语句

while用于实现循环语句,通过判断条件是否为真,来决定是否继续执行。

1.1 一般语法

语法如下:

 while expression:

   suite_to_repeat

1.2 计数

 >>> cnt = 0

 >>> while(cnt < 9):

 ... print 'the index is ', cnt

 ... cnt += 1

 ...

 the index is 0

 the index is 1

 the index is 2

 the index is 3

 the index is 4

 the index is 5

 the index is 6

 the index is 7

 the index is 8

代码块里包含print和自增语句,将被重复执行,知道cnt不下于9。

1.3 无限循环

  while True:
  suite_to_repeat

条件表达式一直为真。

2  for语句

for语句是python提供的另一个循环机制,可以用于遍历序列,可以用在列表解析和生成器表达式中。

2. 1 一般语法

for循环会访问一个可迭代对象(例如序列或叠加器)中的所有元素,并在所有条目处理过后结束循环。语法如下:

 for iter_var in iterable:
  suite_to_repeat

每次循环,iter_var迭代变量被设置为可迭代对象(序列、迭代器或其他支持迭代的对象)的当前元素,提供给suite_to_repeat语句块使用。

2.2 用于序列类型

主要介绍for循环迭代不同的序列对象:字符串、列表及元组。

迭代序列的三种方法:

(1)通过序列项迭代

每次迭代,eachName变量都被设置为列表中特定的某个元素。

(2)通过序列索引迭代

 >>> namelist = ['Bob', 'Lisa', 'Henry']
>>> for nameIndex in range(len(namelist)):
... print namelist[nameIndex]
...
Bob
Lisa
Henry

使用len()函数获取序列长度,使用range()函数创建了要迭代的序列。

(3)使用项和索引迭代

使用内建的enumerate()函数

 >>> namelist = ['Bob', 'Lisa', 'Henry']
>>> for i, eachName in enumerate(namelist):
... print i,eachName
...
0 Bob
1 Lisa
2 Henry

3 range()内建函数

range()完整语法如下:

range([start,] stop[, step])

range()会返回一个包含所有k的列表(start<=k<end),从start到end,k每次递增step,step不能为0。

 >>> range(3, 7)
[3, 4, 5, 6]

4 与序列相关的内建函数

sorted()、reversed()、enumerate()、zip()

reversed():返回一个反序访问的迭代器;

 >>> namelist = ['Bob', 'Lisa', 'Henry']

 >>> years = [1978, 1989, 1990, 2003]

 >>> for name in sorted(namelist):

 ... print name,

 ...

 Bob Henry Lisa

 >>> namelist

 ['Bob', 'Lisa', 'Henry']

 >>> for name in reversed(namelist):

 ... print name,

 ...

 Henry Lisa Bob

 >>> for i, name in enumerate(namelist):

 ... print i, name

 ...

 0 Bob

 1 Lisa

 2 Henry

 >>> for name, year in zip(namelist, years):

 ... print year, name

 ...

 1978 Bob

 1989 Lisa

 1990 Henry

5 break语句

break语句用于结束当前循环跳转到下条语句。

6 continue语句

当遇到continue语句时,程序终止当前循环,并忽略剩余的语句,然后回到循环的顶端。在开始下一次迭代前,如果是条件循环(while循环),将验证条件表达式;如果是迭代循环(for循环),验证是否还有元素可以迭代,只有在验证成功的情况下,才开始下一次迭代。

>>> valid = False
>>> count = 3
>>> while count > 0:
... input = raw_input('Enter passsword:')
... for eachPasswd in passwdList:
... if input == eachPasswd:
... valid = True
... break
... if not valid:
... print "invalid input"
... count -= 1
... continue
... else:
... break

7 pass语句 

pass语句不做任何事情(即NOP,No Operation,无操作),用于在需要有语句块的地方不写任何语句。

8 迭代器和iter()函数

从根本上来说,迭代器就是有一个next()方法的对象,而不是通过索引来计数。当你或是一个循环机制需要下一项时,调用迭代器的next()方法就可以获得它。

迭代器为类序列对象提供了一个类序列的接口,它们是一组数据结构,可以利用它们的索引从0开始一直"迭代"到序列的最后一个条目。

8.1 使用迭代器

(1)序列

>>> i = iter(myTuple)
>>> i.next()
123
>>> i.next()
'abc'
>>> i.next()
45.600000000000001
>>> i.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration

序列会自动的产生它们字节的迭代器。

 for I in seq:
do_something_to(i)

(2)字典

字典也是可迭代的python数据类型。字典的迭代器会遍历它的键(key)。语句for eachKey in myDict.keys()可以缩写为for eachKey in myDict。

 >>> myDict = {'a':10, 'b':20, 'c':30}
>>> for eachKey in myDict:
... print eachKey, myDict[eachKey]
...
a 10
c 30
b 20

另外,python还有三个新的内建字典方法来定义迭代:myDict.iterkeys()(通过键迭代)、myDict.itervalues()(通过值迭代)及myDict.iteritems()(通过键-值对迭代)。

(3)文件

文件对象生成的迭代器会自动调用readline()方法,这样循环可以访问文本文件的所有行,就可以使用for eachline in myFile替换for eachline in myFile.readlines()

 >>> myFile = open('testfile.txt')
>>> for eachline in myFile:
... print eachline
...

8.2 创建迭代器

对一个对象调用iter()就可以得到它的迭代器。语法如下:

iter(obj)

iter(func, sentinel)

如果传递一个参数给iter(),会检查传递的参数是不是一个序列,如果是,根据索引从0一直迭代到序列结束。如果是传递的两个参数给iter(),会重复的调用func,直到迭代器的下个值等于sentinel。

9 列表解析

列表解析可用于动态的创建列表,语法如下:

[expr for iter_var in iterable]

前面的expr应用于序列的每个成员,最后的结果值是该表达式产生的列表。迭代变量并不需要是表达式的一部分。

 >>> [x**2 for x in range(6)]
[0, 1, 4, 9, 16, 25]

还可以和if表达式结合使用,扩展语法如下:

[expr for iter_var in iterable if cond_expr]

这个语法会过滤或"捕捉"满足条件表达式cond_expr的序列成员。

 >>> [x for x in range(6) if x % 2]
[1, 3, 5]

(1)举例:矩阵样例

如一个3行5列的矩阵

 >>> [(x+1, y+1) for x in range(3) for y in range(5)]
[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5)]

10 生成器表达式

生成器表达式是列表解析的一个扩展。生成器是特定的函数,允许你返回一个值,然后"暂停"代码的执行,稍后恢复。

列表解析的不足是必须生成所有的数据,用以创建整个列表。生成器的基本语法和列表相似,不过不是真正的创建数字列表,而是返回一个生成器,这个生成器每次计算出一个条目后,把这个条目"产生"(yield)出来。

生成器表达式如下:

(expr for iter_var in iterable if cond_expr)

(1)举例:交叉配对样例

>>> rows = [1, 2, 3, 17]
>>> def cols():
... yield 56
... yield 2
... yield 1
>>> x_product_pairs = ((i, j) for i in rows for j in cols())
>>> for pair in x_product_pairs:
... print pair
...
(1, 56)
(1, 2)
(1, 1)
(2, 56)
(2, 2)
(2, 1)
(3, 56)
(3, 2)
(3, 1)
(17, 56)
(17, 2)
(17, 1)

(2)重构样例

获取文件中长度最大的行:

 f = open('/etc/motd','r')

 longest = max(len(x.strip()) for x in f)

 f.close()

 return longest

简化如下:

 return max(len(x.strip()) for x in open('/etc/motd')) 

python条件与循环-循环的更多相关文章

  1. Python - 条件控制、循环语句 - 第十二天

    Python 条件控制.循环语句 end 关键字 关键字end可以用于将结果输出到同一行,或者在输出的末尾添加不同的字符,实例如下: Python 条件语句是通过一条或多条语句的执行结果(True 或 ...

  2. Python——条件语句及其循环

    条件语句及其循环 一. 条件语句 在条件语句中可以使用以下所有的运算符: 算术运算符:+.-.*././/.%.** 关系运算符:>.<.==.<=.>=.!= 测试运算符:i ...

  3. python条件判断与循环

    条件判断 1.python缩进规则: 如果if语句判断是True,就把缩进的语句执行了,否则,什么也不做,比如: age=20 if age >= 18: print('your age is' ...

  4. Python条件控制与循环语句

    1. 条件控制 # if-elif-else结构 age = 12 if age < 4: price = 0 elif age < 18: price = 5 else: price = ...

  5. Python条件判断和循环,range()函数

    条件判断经常使用if语句进行判断,表达方式为:if 条件语句:      :elif:else if...用于执行第一条不满足if的判断,继续执行其它的判断.比如一个简单的if判断 Python3取消 ...

  6. Python条件判断和循环语句

    一.条件判断语句 通过一条或多条语句的判断来决定是否执行代码块 1.if语句基本形式: if 判断条件:    语句块 例如: score=75if score>=60:    print &q ...

  7. python 条件判断和循环

    一.条件判断    if if  age>= 18: 记住在判断语句后面要加上     : 还有要注意他的缩进 age = 20if age >= 18: print 'your age ...

  8. python 条件分支与循环

    一.if判断: 语法一: if 条件: # 条件成立时执行的子代码块 代码1 代码2 代码3 示例: sex='female' age=18 is_beautiful=True if sex == ' ...

  9. python条件判断和循环

    条件判断 if <条件判断1>: <执行1> elif <条件判断2>: <执行2> elif <条件判断3>: <执行3> e ...

  10. Python 条件判断 和循环

    使用条件判断 if else # 条件派单 if else print('条件派单 if else') # s = input('请输入生日年号:') # birth = int(s) birth = ...

随机推荐

  1. classpath*与classpath

    classpath*:的出现是为了从多个jar文件中加载相同的文件. classpath:只能加载找到的第一个文件.

  2. codeforces 220B . Little Elephant and Array 莫队+离散化

    传送门:https://codeforces.com/problemset/problem/220/B 题意: 给你n个数,m次询问,每次询问问你在区间l,r内有多少个数满足其值为其出现的次数 题解: ...

  3. Visual Studio Team Services使用教程【4】:默认团队checkin权限修改

    2017.4.23之后建议朋友看下面的帖子 TFS2017 & VSTS 实战(繁体中文视频) Visual Studio Team Services(VSTS)与敏捷开发ALM实战关键报告( ...

  4. ML基础——搜索引擎与图书管理,百度与李彦宏

    本文始发于个人公众号:TechFlow 谈及机器学习,大家想必会有许多联想,比如最近火热的人工智能,再比如战胜李世石的AlphaGo,甚至还会有人联想起骇客帝国或者是机械公敌等经典机器人电影. 但实际 ...

  5. 聊聊最近撸Spring源码感悟

    一.前言     最近一段时间撸了Spring IOC.AOP.Transactional源码,这篇文章聊聊我写了哪些小玩意,这可能就是阅读源码以后最大收获.希望大家在里面能学习一些什么东西吧: 二. ...

  6. 简易数据分析 15 | Web Scraper 高级用法——CSS 选择器的使用

    这是简易数据分析系列的第 15 篇文章. 年末事情比较忙,很久不更新了,后台一直有读者催更,我看了一些读者给我的私信,发现一些通用的问题,所以单独写篇文章,介绍一些 Web Scraper 的进阶用法 ...

  7. form表单提交方式实现浏览器导出Excel

    刚开始使用ajax做Excel导出,发现ajax做不了浏览器导出只能下载到本地,于是用form提交可以提供浏览器下载Excel. 1>用ajax做本地下载: FileOutputStream f ...

  8. 洛谷$P$4137 $Rmq\ Problem / mex$ 主席树

    正解:主席树 解题报告: 传送门$QwQ$ 本来以为是道入门无脑板子题,,,然后康了眼数据范围发现并没有我想像的那么简单昂$kk$ 这时候看到$n$的范围不大,显然考虑离散化?但是又感觉似乎布星?因为 ...

  9. Spring MVC拦截器配置

    Spring MVC拦截器配置 (1)自定义拦截器 package learnspringboot.xiao.other; import org.springframework.web.servlet ...

  10. HDU5521 Meeting 题解 最短路

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5521 题目大意: 有 \(n\) 个点 \(m\) 个集合,一个点可能处于若干个集合内,属于第 \(i ...