>>> 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]]