>>> L[:] ['Adam', 'Lisa', 'Bart', 'Paul']
把list换成tuple,切片操做彻底相同,只是切片的结果也变成了tuple。python
迭代操做就是对于一个集合,不管该集合是有序仍是无序,咱们用 for 循环老是能够依次取出集合的每个元素。数据结构
for i in range(1, 100)[6::7]: print i
>>> L = ['Adam', 'Lisa', 'Bart', 'Paul'] >>> for index, name in enumerate(L): ... print index, '-', name ... 0 - Adam 1 - Lisa 2 - Bart 3 - Paul
enumerate() 函数把:
['Adam', 'Lisa', 'Bart', 'Paul']
变成了相似:
[(0, 'Adam'), (1, 'Lisa'), (2, 'Bart'), (3, 'Paul')]
所以,迭代的每个元素其实是一个tuple:app
for t in enumerate(L): index = t[0] name = t[1] print index, '-', name
索引迭代也不是真的按索引访问,而是由 enumerate() 函数自动把每一个元素变成 (index, element) 这样的tuple,再迭代,就同时得到了索引和元素自己。函数
values() 方法实际上把一个 dict 转换成了包含 value 的list。code
可是 itervalues() 方法不会转换,它会在迭代过程当中依次从 dict 中取出 value,因此 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。对象
打印 itervalues() 发现它返回一个
若是一个对象说本身可迭代,那咱们就直接用 for 循环去迭代它,可见,迭代是一种抽象的数据操做,它不对迭代对象内部的数据有任何要求。内存
注意三种方法的思想element
L=[] for x in range(1,10): for y in range(10): for z in range(1,10): if x==z : L.append(100*x+10*y+z) print L print [100 * x + 10 * y + z for x in range(1, 10) for y in range(10) for z in range(10) if x==z] print [x for x in range(100,1000) if str(x)[0]==str(x)[-1]]