迭代
迭代其实我们已经用过了,即我们在遍历list和tuple的时候用的for _ in _其实就是属于迭代了
对于
list
tuple
来说这两个可以通过下标去定位到元素的位置,但是对于
dict来说的话,就只能通过迭代了
我们看一下字典是怎么遍历的
如下
d={'a':1,'b':2,'c':3}
for key in d:
print(key)
执行结果为
a
b
c
为什么是上面的打印结果呢?
因为dict默认迭代的是key(键),如果需要迭代value(值),那么需要这么写
d={'a':1,'b':2,'c':3}
for value in d.values():
print(value)
那么打印结果就是
1
2
3
能不能key,value都打印呢?当然可以,按照下方写法就可以了
d={'a':1,'b':2,'c':3}
for key,value in d.items():
print(key,value)
那么打印结果就是
a 1
b 2
c 3
请看示例:
除了list,tuple,dict之外,字符串也可以遍历
for c in 'abcdef':
print(c)
输出
a
b
c
d
e
f
那你会问 那整数、浮点数、布尔能遍历吗?
我们开看一下
结果都不行
都是报了一个
...object is not iterable
这样的错误。
问题来了?怎么样才能判断这个对象能不能迭代呢
python为我们提供了一个「Iterable」类型
但是我们需要引用一下,然后就可以判断了,请看
from collections import Iterable
print(isinstance('abc',Iterable))
print(isinstance(123,Iterable))
print(isinstance([1,2,3],Iterable))
print(isinstance(12.99,Iterable))
print(isinstance(True,Iterable))
print(isinstance((1,2,3,4),Iterable))
print(isinstance({'a':1,'b':2,'c':3}))
print(isinstance({'a','b','c'},Iterable))
依次打印
发现:
- 字符串、list、tuple、dict、set都是可以迭代的
- 整数、浮点数、布尔值都是不可以迭代的
迭代另外的用法
除了正常的 for in的这个用法外,迭代还有另外两种用法
- 实现类似下标的效果
- 迭代时同时引用两个或者多个变量
实现类似下标的效果
需要用到enumerate
函数
如下
for index,value in enumerate(('xiaoming','xiaohong','xiaolv','xiaolan')):
print(index,':',value)
输出
0 : xiaoming
1 : xiaohong
2 : xiaolv
3 : xiaolan
效果图:
我们把元组(tuple)换成set试试
我们再换成 字典(dict)试试
仍然是dict,这里得到他的key value
恩,不错很好玩,我们来看第二种常用用法
迭代时同时引入两个或多个变量
这个用于二维或者多维的list
for x,y in(((1,2),(11,22),(111,222))):
print(x,y)
输出
1 2
11 22
111 222
请看效果图
总结
迭代说到底还是比较简单的,别看我写了这么一大堆,其实挺好理解的,需要特别记住的就这么几点:
- list、tuple、dict、set、字符串都是可以迭代的,可以使用collections下面的Iterable去判断
- 迭代dict时有一些用法技巧,详见文章
- 迭代的其他用法需要记牢
欧了