高级特性

1.切片
2.迭代

默认dict迭代的是key

>>> d = {'a': 1, 'b': 2, 'c': 3}
>>> for key in d:
...     print(key)
...
a
c
b

如果迭代value 可以使用for value in d.values( )
同时迭代key和value,可以使用 for k,v in d.items()
如果要对list实现下表循环,python内置的enumerate函数可以把list变成索引元素对。

>>> for i, value in enumerate(['A', 'B', 'C']):
...     print(i, value)
...
0 A
1 B
2 C
3.列表生成式
可以直接创建一个列表
[x*x for x in range(1,11)]
[1,4,9.....,100]
加上if判断
[x*x for x in range(1,11) if x%2 == 0]
二层循环,可以生成全排列
[m+n for m in "ABC" for n in "XYZ"]
使用多个变量
[k +'='+v for k,v in d.itens()]
将list中所有的字符串变成小写
[s.lower() for s in L]

判断变量是不是字符串
isinstance(x,str)

4.生成器(generator)

列表生成式,可以直接创建一个列表,但是受内存限制,列表容量肯定是有限的,而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅需访问前面几个元素,那后面的绝大多数元素占用的空间将白白的浪费了。
创建一个generator
1.只要把一个列表生成式的[]改成()

>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x1022ef630>
我们可以通过next()函数获得generator的每一个元素
>>> next(g)
0
>>> next(g)
1
>>> next(g)
4
>>> next(g)

generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。
当然,上面这种不断调用next(g)实在是太变态了,正确的方法是使用for循环,因为generator也是可迭代对象:

>>> g = (x * x for x in range(10))
>>> for n in g:
...     print(n)
... 
0
1
4

2.generator的另一种方法。如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator:

def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1
    return 'done'
5.迭代器

凡是可作用于for循环的对象都是Iterable类型;

凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

Python的for循环本质上就是通过不断调用next()函数实现的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.切片:取一个list或tuple的部分元素是非常常见的操作,比如说取list中的前n个元素,我们用循环来实现这...
    4everwrf阅读 159评论 0 1
  • 在python中,代码不是越多好,而是越少越好;代码不是越复杂越好,而是越简单越好;代码越少,开发效率越高! 1 ...
    祐吢房_2c9a阅读 307评论 1 1
  • 一、生成器 通过列表生成式,我们可以直接创建一个列表。但是收到内存限制,列表容量肯定是有限的。而且,创建一个包含1...
    三天逃离阅读 309评论 0 0
  • 1.函数 定义函数 语法: def 函数名(参数): 函数体 return参数 在Python交互环境中定...
    井上皓阅读 376评论 0 0
  • 使用XMind的用户,应该都清楚,XMind8 有一个XMind Cloud即云存储的功能。云服务大家其实都很熟悉...
    wv橙子阅读 444评论 0 0