参考:
Note
1.如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。
在C、C++、Java等语言中,for循环迭代是通过下标实现的,如:
for (int i = 0; i < s.length(); i++) { printf("%c ", s[i]);}
而在Python中,迭代是通过for...in...
实现的,只要对象是可迭代对象,无论支持下标与否,都可以进行迭代。
eg.
#!/usr/bin/env python3L = ['it', 'is', 'a', 'list']for i in range(4) : print(L[i])T = ('it', 'is', 'a', 'tuple')for i in range(4) : print(T[i])
output:
sh-3.2# ./iteration1.py itisalistitisatuple
因此,Pythonfor循环抽象程度要高于C、Java等语言的for循环。
2.Python支持迭代不支持下标的对象,如dict与字符串:
eg.dict
dic = {'Chen' : 20, 'Number' : '952693358', 'City' : 'FuZhou'}for key in dic : print(key, dic[key])
Chen 20Number 952693358City FuZhou
eg.string
str1 = 'HeyGirl'for i in str1 : print(i)
HeyGirl
所以,当我们使用for循环时,只要作用于一个可迭代对象,for循环就可以正常运行,而我们不太关心该对象究竟是list还是其他数据类型。
3.判断一个对象是可迭代对象 => 通过collections模块的Iterable类型:
>>> from collections import Iterable>>> isinstance('abc', Iterable) # 判断字符串True>>> isinstance(123, Iterable) # 判断整数False>>> isinstance((0,), Iterable) # 判断tupleTrue>>> isinstance(['a'], Iterable) # 判断listTrue>>>
4.如果要使list实现下标循环 => 内置的enumerate函数 => 将list转换为索引-元素对。
L = ['Chen', 'Mac', 'IPhone', 'Github']for i, value in enumerate(L) : print(i, value)
0 Chen1 Mac2 IPhone3 Github
2017/2/5