高级特性

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()函数实现的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容