迭代
如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)
在Python中,迭代是通过for...in来完成的。
d = {'a':1,'b':2,'c':3}
for key in d:
print(key)
默认情况下,dict迭代的是key
for value in d.values():
print(value)
如果要迭代value,可以用for value in d.values()
for k,v in d.items():
print(k,v)
![](https://i-blog.csdnimg.cn/blog_migrate/0b3df45f3d0bcadf0404de6f9fad209f.png)
如果要同时迭代key和value,可以用for k, v in d.items()
由于字符串也是可迭代对象,因此,也可以作用于for循环:
for ch in 'ABCD':
print(ch)
![](https://i-blog.csdnimg.cn/blog_migrate/e434dafbad3d86fb5d5534ef26dee96a.png)
只要是可迭代对象,都可以迭代,不用关心该对象究竟是list还是其他数据类型
可以通过collections模块的Iterable类型判断
from collections import Iterable
print(isinstance('abc', Iterable))#str是否可迭代
print(isinstance([1,2,3],Iterable))#list是否可迭代
print(isinstance(123,Iterable))#整数是否可迭代
![](https://i-blog.csdnimg.cn/blog_migrate/428c1f14e9f713686caa8eab0b0d2e7a.png)
如果要对list实现类似Java那样的下标循环怎么办
Python内置的enumerate函数可以把一个list变成索引-元素对
for i,value in enumerate(['a','b','c']):
print(i,value)
![](https://i-blog.csdnimg.cn/blog_migrate/2814067f7aebe77b89cccc0919f10186.png)
列表生成式
列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。
要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11)):
print(list(range(1, 11)))
![](https://i-blog.csdnimg.cn/blog_migrate/413f4b01097e3585fc2c3f9426ec09af.png)
但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?方法一是循环
L = []
for x in range(1,11):
L.append(x*x)
print(L)
![](https://i-blog.csdnimg.cn/blog_migrate/e83eebba232a03ab6fc24debb48fd524.png)
但是循环太繁琐,而列表生成式则可以用一行语句代替循环生成上面的list:
写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来
for循环后面还可以加上if判断,比如选出仅偶数的平方:
x = [x*x for x in range(1,11) if x%2==0]
print(x)
![](https://i-blog.csdnimg.cn/blog_migrate/79b5bdc55fb38ac887779c2730417116.png)
还可以使用两层循环,可以生成全排列:
e = [m + n for m in 'abc' for n in 'xyz']
print(e)
![](https://i-blog.csdnimg.cn/blog_migrate/3a2291e8b9c4d77c4d57b9edbc0339e0.png)
运用列表生成式,可以写出非常简洁的代码。例如,列出当前目录下的所有文件和目录名,可以通过一行代码实现:
import os
print([d for d in os.listdir('.')])#os.listdir可以列出文件和目录
![](https://i-blog.csdnimg.cn/blog_migrate/51d23b08cd0e84c91f52758792bd114c.png)
for循环可以使用两个或多个变量
c = {'x':1,'y':2,'z':3}
for k,v in c.items():
print(k,v)
#因此列表生成式可以使用两个变量来生成list
x = {'x':'A','y':'B','z':'c'}
print([k + '= '+ v for k ,v in x.items()])
![](https://i-blog.csdnimg.cn/blog_migrate/1dda1923438382c7e26ae58f4ac2dcec.png)
把list所有字符串变成小写
j = ['Hello','Word','IBM','Apple']
print([s.lower() for s in j ])
![](https://i-blog.csdnimg.cn/blog_migrate/dbef481f5ceb42f2f8167c703c1698a7.png)