zoukankan      html  css  js  c++  java
  • python之列表推导、迭代器、生成器

    http://blog.chinaunix.net/uid-26722078-id-3484197.html

    1.列表推导

      看几个例子,一切就明白了。

     1 #!/usr/bin/python
     2 numbers = range(10)
     3 size = len(numbers)
     4 evens = []
     5 i = 0
     6 while i < size:
     7     if i%2 == 0:
     8         evens.append(i)
     9     i += 1
    10 print evens
    11  
    12 #!/usr/bin/python
    13 evens = [i for i in range(10) if i % 2 == 0]
    14 print evens
    15  
    16 #!/usr/bin/python
    17 def _process(pos, element):
    18     return '%d:%s' % (pos, element)
    19  
    20 seq = ['a', 'b', 'c']
    21 print [_process(i, el) for i, el in enumerate(seq)]

      备注:注意 enumerate用法

    2.迭代器

      迭代器只不过是实现迭代器协议的容器对象,基于next和__iter__两个方法

     1 #!/usr/bin/python
     2 class TestIterator(object):
     3     def __init__(self, step):
     4         self.step = step
     5     def next(self):
     6         """Return the next element"""
     7         if self.step == 0:
     8             raise StopIteration
     9         self.step -= 1
    10         return self.step
    11     def __iter__(self):
    12         """Return the iterator itself."""
    13         return self
    14 print [el for el in TestIterator(4)]

    3.生成器

      next()和send()的工作机制一样,不过使用send(),yield将变成能够返回传入的值,因而可以据此来改变行为。

      看两个例子,一切就明白了。

     1 #!/usr/bin/python
     2 def power(values):
     3     for value in values:
     4         print "powing %s" % value
     5         yield value
     6 def add(values):
     7     for value in values:
     8         if value % 2 == 0:
     9             yield value + 3
    10         else:
    11             yield value + 2
    12 elements = [1, 4, 7, 9, 12, 19]
    13 res = add(power(elements))
    14 res.next()
     1 #!/usr/bin/python
     2 def psychologist():
     3     print "Please tell me your problems"
     4     while True:
     5         answer = (yield)
     6         if answer is not None:
     7             if answer.endswith('?'):
     8                 print("Don't ask yourself too much questions!")
     9             elif 'good' in answer:
    10                 print("That's good, Let's go on")
    11             elif 'bad' in answer:
    12                 print("It's a pity")
    13 free = psychologist()
  • 相关阅读:
    计算机中的二进制运算
    面试题14:剪绳子
    面试题13:机器人的运动范围
    面试题12:矩阵中的路径
    面试题11:旋转数组的最小数字
    面试题10_2:跳台阶
    面试题10:斐波那契数列
    HDU 2202 最大三角形(凸包)
    刚装的系统C盘占空间特别大怎么办?关闭win7的系统还原和调整虚拟内存
    POJ 1113 Wall (凸包)
  • 原文地址:https://www.cnblogs.com/cdsj/p/3552245.html
Copyright © 2011-2022 走看看