Python基礎(三)

切片

只用一個 : ,表示從頭至尾:

>>> L[:]
['Adam', 'Lisa', 'Bart', 'Paul']

切片操做還能夠指定第三個參數:第三個參數表示每N個取一個,上面的 L[::2] 會每兩個元素取出一個來,也就是隔一個取一個。

把list換成tuple,切片操做徹底相同,只是切片的結果也變成了tuple。python

迭代

迭代操做就是對於一個集合,不管該集合是有序仍是無序,咱們用 for 循環老是能夠依次取出集合的每個元素。數據結構

*注意: 集合是指包含一組元素的數據結構,咱們已經介紹的包括:

1 有序集合:list,tuple,str和unicode;

2 無序集合:set;

3 無序集合而且具備 key-value 對:dict;

例題:請用for循環迭代數列 1-100 並打印出7的倍數。

for i in range(1, 100)[6::7]:
    print i

Python中,迭代永遠是取出元素自己,而非元素的索引。

想要取出索引要用enumerate() 函數

>>> 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,再迭代,就同時得到了索引和元素自己。函數

  1. values() 方法實際上把一個 dict 轉換成了包含 value 的list。code

  2. 可是 itervalues() 方法不會轉換,它會在迭代過程當中依次從 dict 中取出 value,因此 itervalues() 方法比 values() 方法節省了生成 list 所需的內存。對象

  3. 打印 itervalues() 發現它返回一個 對象,這說明在Python中,for 循環可做用的迭代對象遠不止 list,tuple,str,unicode,dict等,任何可迭代對象均可以做用於for循環,而內部如何迭代咱們一般並不用關心。 索引

若是一個對象說本身可迭代,那咱們就直接用 for 循環去迭代它,可見,迭代是一種抽象的數據操做,它不對迭代對象內部的數據有任何要求。內存

利用 3 層for循環的列表生成式,找出對稱的 3 位數。例如,121 就是對稱數,由於從右到左倒過來仍是 121。

注意三種方法的思想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]]
相關文章
相關標籤/搜索