Python之進階特性

來源:互聯網
上載者:User

標籤:abc   建立   pytho   3.3   return   set   實現   ict   yield   

3.進階特性3.1切片

L = list(range(100))

L[0:3]表示,從索引0開始取,直到索引3為止,但不包括索引3

如果第一個索引是0,還可以省略  L[:3]

也支援取倒數元素 L[-2:] 取L集合的倒數2位元素

L[10:20] 取前11-20個數:

L[:10:2]取前10個數,每兩個取一個

L[::5]  所有數,每五個取1個

‘ABCDEFG‘[:3]

Python沒有針對字串的截取函數,只需要切片一個操作就可以完成,非常簡單

 

3.2 迭代

python中不管迭代對象有無下標,都可以進行迭代

那麼如何判斷一個對象是否可迭代呢?from collections import Iterable

isinstance(‘abc‘, Iterable) ;

在Java裡可以迭代下標,python裡可以使用enumerate 函數迭代索引和元素的

for i, value in enumerate([‘A‘, ‘B‘, ‘C‘]):

...     print(i, value)

 

3.3 列表產生,是Python內建的非常簡單卻強大的可以用來建立list的產生式。

L = []

>>> for x in range(1, 11):

...    L.append(x * x)#使用迴圈

 

#使用列表產生式

[x*x for x in range(1,11)if x%2 == 0]  #要產生的元素x*x放置前面

#使用2層迴圈,產生全排列

[m+n for m in ‘ABC‘ for n in ‘XYZ‘]

 

import os # 匯入os模組,模組的概念後面講到

>>> [d for d in os.listdir(‘.‘)] # os.listdir可以列出檔案和目錄

#for迴圈其實可以同時使用兩個甚至多個變數,比如dict的items()可以同時迭代key和value:

d = {‘x‘: ‘A‘, ‘y‘: ‘B‘, ‘z‘: ‘C‘ }

>>> for k, v in d.items():

...     print(k, ‘=‘, v)

#列表產生式也可以使用兩個變數來產生list:

 d = {‘x‘: ‘A‘, ‘y‘: ‘B‘, ‘z‘: ‘C‘ }

>>> [k + ‘=‘ + v for k, v in d.items()]

[‘y=B‘, ‘x=A‘, ‘z=C‘]

#list中所有的字串變成小寫:

L = [‘Hello‘, ‘World‘, 18, ‘Apple‘, None]

>>> [s.lower() for s in L if isinstance(s,str) == True]

 

3.4 產生器

列表的空間是有限的,在python中,一邊迴圈一邊計算的機制 generator

g = (x * x for x in range(10))

for n in g:

         print(n)

         #著名的斐波拉契數列(Fibonacci),除第一個和第二個數外,任意一個數都可由前兩個數相加得到:1, 1, 2, 3, 5, 8, 13, 21, 34, ...

         def fib(max):

    n, a, b = 0, 0, 1

    while n < max:

        print(b)

        a, b = b, a + b

        n = n + 1

    return ‘done‘

    #上面的函數和generator僅一步之遙。要把fib函數變成generator,只需要把print(b)改為yield b就可以了:

#generator函數  在執行過程中,遇到yield就中斷,下次又繼續執行。

##楊輝三角

def triangles():

    L = [1] #定義一個list[1]

    while True:

        yield L

        L = [L[i] + L[i + 1] for i in range(len(L) - 1)]

        L.insert(0,1)

        L.append(1)

        if(len(L)>10):

        break

#產生一個generator對象,然後通過for迴圈迭代輸出每一行

a=triangles(10)

for i in a:

    print(i)

 

3.5迭代器

直接作用於for迴圈的資料類型有以下幾種:

一類是集合資料類型,如list、tuple、dict、set、str等;

一類是generator,包括產生器和帶yield的generator function。

 Iterable 這些可以直接作用於for迴圈的對象統稱為可迭代對象:Iterable。

可以使用isinstance()判斷一個對象是否是Iterable對象:

isinstance({}, Iterable)  #True

 

 Iterator  可以被next()函數調用並不斷返回下一個值的對象稱為迭代器:Iterator

可以使用isinstance()判斷一個對象是否是Iterator對象:

isinstance((x for x in range(10)), Iterator)  #True

 isinstance(‘abc‘, Iterator)  #False

-------------------------------------------------------------

是因為Python的Iterator對象表示的是一個資料流,Iterator對象可以被next()函數調用並不斷返回

下一個資料,直到沒有資料時拋出StopIteration錯誤。可以把這個資料流看做是一個有序序列,

但我們卻不能提前知道序列的長度,只能不斷通過next()函數實現按需計算下一個資料,

所以Iterator的計算是惰性的,只有在需要返回下一個資料時它才會計算。

-------------------------------------------

集合資料類型如list、dict、str等是Iterable但不是Iterator,不過可以通過iter()函數獲得一個Iterator對象。

Python之進階特性

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.