乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Python之列表推導(dǎo)式

       imelee 2018-06-26

      如下是Python官方文檔中列表推導(dǎo)式部分的譯文,筆者對(duì)于該部分也是初學(xué),只能從官方文檔學(xué)起了。有不合適的地方還望指正,謝謝。

      Python官網(wǎng)列表推導(dǎo)式部分

      一 列表推導(dǎo)式

        列表推導(dǎo)式提供了一種創(chuàng)建list的簡便方法。應(yīng)用程序創(chuàng)建列表時(shí),列表中的元素來源于其他序列、可迭代對(duì)象或創(chuàng)建的一個(gè)滿足一定條件的序列。
        例如,假設(shè)我們要?jiǎng)?chuàng)建一個(gè)平方數(shù)組成的列表,比如:
      1. squares = []  
      2. for x in range(10):  
      3.     squares.append(x**2)  
      4. print(squares)  
      輸出結(jié)果:
      1. [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]  
      我們也可以通過下面的方式獲得相同的列表:

      1. squares = [x**2 for x in range(10)]  
      這也等價(jià)于下面的方式,但列表推導(dǎo)式的方式更簡單。
      1. squar = map(lambda x:x**2,range(10))  
      對(duì)于函數(shù)map(function,iterable),其含有兩個(gè)參數(shù),第一個(gè)參數(shù)function是一個(gè)函數(shù),第二個(gè)參數(shù)是一個(gè)列表。列表中的每一個(gè)元素調(diào)用函數(shù)function,結(jié)果構(gòu)成一個(gè)新的序列。

      關(guān)于map()函數(shù)和map對(duì)象,請(qǐng)參考:

      關(guān)于lambda,請(qǐng)參考:

      列表推導(dǎo)式包含一對(duì)括號(hào),在括號(hào)中有一個(gè)表達(dá)式,表達(dá)式后面緊跟一條for語句,然后是零條或多條,for語句或if語句。通過for語句和if語句計(jì)算出表達(dá)式,結(jié)果作為新列表的元素。例如,下面的列表推導(dǎo)式將兩個(gè)不同列表中的元素整合到了一起:

      1. >>> [(x,y)for x in [1,2,3] for y in [3,1,4] if x != y]  
      2. [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]  
      這等價(jià)于:
      1. >>> combs = []  
      2. >>> for x in [1,2,3]:  
      3.     for y in [3,1,4]:  
      4.         if x != y:  
      5.             combs.append((x,y))  
      6.   
      7. >>> combs  
      8. [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]  
      注意:for語句和if語句在這兩段程序片中的順序是相同的。

      如果表達(dá)式是一個(gè)元組(例如前面例子中的(x,y)),那么必須得給它加上括號(hào)。
      1. >>> vec = [-4,-2,0,2,4]  
      2. >>> #用vec中元素的倍數(shù),創(chuàng)建一個(gè)數(shù)組  
      3. >>> [x*2 for x in vec]  
      4. [-8, -4, 0, 4, 8]  
      5. >>> #過濾列表,刪除列表中的負(fù)數(shù)  
      6. >>> [x for x in vec if x >= 0]  
      7. [0, 2, 4]  
      8. >>> #對(duì)列表中的每個(gè)元素應(yīng)用一個(gè)函數(shù)  
      9. >>> [abs(x) for x in vec]  
      10. [4, 2, 0, 2, 4]  
      11. >>> #對(duì)每個(gè)元素調(diào)用一個(gè)方法  
      12. >>> freshfruit = ['000banana00','0000loganberry0','0passion fruit00000']  
      13. >>> [weapon.strip('0') for weapon in freshfruit]#str.strip(ch) : 刪除字符串開頭結(jié)尾處的字符ch  
      14. ['banana', 'loganberry', 'passion fruit']  
      15. >>> #創(chuàng)建一個(gè)2元元組,比如(number,square)  
      16. >>> [(x,x**2) for x in range(6)]  
      17. [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]  
      18. >>> #元組必須用括號(hào)包圍,不然就會(huì)出錯(cuò)  
      19. >>> [x,x**2 for x in range(6)]  
      20. SyntaxError: invalid syntax  
      21. >>> #將一個(gè)多維數(shù)組轉(zhuǎn)化為一個(gè)一維數(shù)組  
      22. >>> vec =  [[1,2,3],[4,5,6],[7,8,9]]  
      23. >>> [num for elem in vec for num in elem]  
      24. [1, 2, 3, 4, 5, 6, 7, 8, 9]  
      列表推導(dǎo)式可以包含復(fù)雜表達(dá)式和嵌套函數(shù);

      1. >>> from math import pi  
      2. >>> [str(round(pi,i)) for i in range(1,6)]  
      3. ['3.1', '3.14', '3.142', '3.1416', '3.14159']  
      對(duì)于round函數(shù),其本身的執(zhí)行與Python的版本有關(guān)和計(jì)算機(jī)的精度有關(guān),詳情請(qǐng)參考下面的鏈接,此處可簡單理解為取pi的i位有效數(shù)字。


      二 嵌套列表推導(dǎo)式

      列表推導(dǎo)式中,最基本的表達(dá)式可以是任意表達(dá)式,包括其他列表推導(dǎo)式。

      下面的3*4的矩陣,可以當(dāng)做一個(gè)列表list,該列表由3個(gè)長度為4的子列表的組成:

      1. >>> matrix = [  
      2.     [1,2,3,4],  
      3.     [5,6,7,8],  
      4.     [9,10,11,12],  
      5.     ]  
      6. >>> matrix  
      7. [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]  
      使用下面的列表推導(dǎo)式轉(zhuǎn)置行和列:

      1. >>> [[row_list[j] for row_list in matrix]for j in range(4)]  
      2. [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]  
      從前面的小節(jié)中可以看出,嵌套的列表推導(dǎo)式是在for循環(huán)的body中進(jìn)行計(jì)算的,所以上滿的例子等同于:

      1. >>> transposed = []  
      2. >>> for j in range(4):  
      3.     transposed.append([row[j] for row in matrix])  
      4. >>> transposed  
      5. [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]  
      也等同于:
      1. >>> transposed  
      2. [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]  
      3. >>> transposed = []  
      4. >>> for j in range(4):  
      5.     #下面的三行實(shí)現(xiàn)了嵌套列表推導(dǎo)式  
      6.     transposed_row = []  
      7.     for row_list in matrix:  
      8.         transposed_row.append(row_list[j])  
      9.     transposed.append(transposed_row)  
      10.   
      11. >>> transposed  
      12. [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]  
      在現(xiàn)實(shí)情況中,與復(fù)雜的流式語句相比,你可能更喜歡Python的內(nèi)置函數(shù)。那么,zip()函數(shù)就更適合與完成上面的工作了。

      1. >>> zipp = zip(*matrix)  
      2. >>> list(zipp)  
      3. [(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]]  
      關(guān)于zip()函數(shù),請(qǐng)參考:

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多