Python for循环语句

2016-12-09

for 循环是Python中最常用的一种循环语句。经典应用场景是遍历某个容器内的所有元素,比如list或者一个字符串。

1. 使用for … in …循环遍历容器元素

for循环最基本的用法如下:

for it_var in container:
    #执行的操作
    statement(s)

具体的例子:

#字符串容器中的元素是字符
for letter in 'Python': 
   print 'letter is :',letter

strs = ['aaa', 'bbb',  'ccc', 'ddd']
for item in strs: 
   print 'item is : ',item

2. for else语句

循环中的else语句是Python中不太常用,同时也很容易误解的语法特性。它在循环体正常结束后执行,也就是没有遇到异常,或者没有通过break跳出循环体。示例代码如下

#循环正常结束,完成循环后执行else语句
>>> for i in range(2):
...     print i
... else:
...     print 'after loop'
... 
0
1
after loop

#循环非正常结束,不执行else语句
>>> for i in range(2):
...     if i == 0:
...             print i
...             break
... else:
...     print 'after loop'
... 
0

3. 总结:for循环遍历容器元素的几种方法

遍历元素是对容器最常用的基本操作。下面以list为例总结常见用法。

  • for in 语句直接遍历元素。
    lst = range(5)
    for item in lst:
       print item
    
  • 使用元素的索引号。
    lst = ['a','b','c','d']
    for id in range(len(lst)):
        print lst[id]
    
  • 使用迭代器。
    >>> lst = range(3)
    >>> it = iter(lst)
    >>> for x in it:
    ...     print x
    0
    1
    2
    >>> type(it)
    <type 'listiterator'>
    
  • 两个容器的并行迭代。也就是同时处理两个容器。
    >>> name = ['a','b','c']
    >>> IDs  = [11,12,13] 
    #如果IDs含有4个元素,自动匹配前三个
    >>> Lcomb = zip(name,IDs)
    >>> type(Lcomb)
    <type 'list'>
    >>> Lcomb
    [('a', 11), ('b', 12), ('c', 13)]
    >>> for nameItem, id in Lcomb:
    ...     print 'id for ',nameItem,' is ',id
    id for  a  is  11
    id for  b  is  12
    id for  c  is  13
    

4. for语句的高级应用

  • 列表推导式。两个最简单的例子:
    >>> [x for x in range(10) if x % 3 == 0]
    [0, 3, 6, 9]
    >>> [x**2 for x in range(5)]
    [0, 1, 4, 9, 16]
    
  • 利用enumerate函数可以方便得到元素的索引号。
    >>> Lsquare = [x**2 for x in range(5)]
    >>> for id, item in enumerate(Lsquare):
    ...     print id,' : ',item
    0  :  0
    1  :  1
    2  :  4
    3  :  9
    4  :  16
    

5. 细节备忘

  • Python2x版本xrangerange的区别:range一次性创建整个序列,而xrange一次只创建一个数字,所以在循环次数较大的时候请使用xrange。Python3之后range的实现方法跟xrange是一样的,实际上变成了同一个函数。


思想果(www.sixiangguo.net)原创,作者:无梨教主。转载注明作者 和 本文链接: http://www.sixiangguo.net/archives/463.html