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()函数实现的
网友评论