亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python筆記002-列表推導式

系統 2134 0

Python筆記002-列表推導式

以下是我學習《流暢的Python》后的個人筆記,現在拿出來和大家共享,希望能幫到各位Python學習者。

首次發表于: 微信公眾號:科技老丁哥,ID: TechDing,敬請關注。

本篇主要知識點:

  1. 列表推導式可以從一個序列快速構建另一個序列,非常方便快捷,強烈建議使用。

  2. 列表推導式適用于簡單的for循環,可以對一個列表中的每個元素進行相同操作,也可以挑選出原列表中滿足一定條件的元素組成新的列表。

  3. 集合推導式應用比較少,而字典推導式卻應用廣泛,可以從一個dict中選擇出滿足一定條件的items組成新的dict,也可以對原dict中的key或value進行操作。

  4. 列表推導式有極其廣泛的應用場景,可以用于循環執行某個函數,也可以用于將某個list轉換為dict,或將dict轉換為list等。

1. 列表推導式

列表推導式是構建列表(list)的一種快捷方式,而且可讀性強,用它編寫的代碼非常有Python味兒,是一種非常推薦的編程風格。

而且,Python的內部實現對列表推導式做了大量優化,可以保證運行速度非常快。

列表推導式可以僅僅使用[]來生成一個list,基本代碼格式為: [表達式 for 變量 in 列表] 或者 [表達式 for 變量 in 列表 if 條件] ,如下為這兩種格式的實現方法:

            
              
                ## demo1:
              
              
alist
              
                =
              
              
                [
              
              
                1
              
              
                ,
              
              
                2
              
              
                ,
              
              
                3
              
              
                ,
              
              
                50
              
              
                ,
              
              
                89
              
              
                ,
              
              
                26
              
              
                ,
              
              
                30
              
              
                ]
              
              
odd
              
                =
              
              
                [
              
              i 
              
                for
              
               i 
              
                in
              
               alist 
              
                if
              
               i
              
                %
              
              
                2
              
              
                ==
              
              
                1
              
              
                ]
              
              
                # 選出列表alist中所有的奇數
              
              
                print
              
              
                (
              
              odd
              
                )
              
              
                # [1, 3, 89]
              
            
          

Python中的列表推導式主要替換了Java或C語言中的for循環,當你想使用for循環來實現簡單的業務時,不妨使用列表推導式。

            
              
                ### demo2:
              
              
alist
              
                =
              
              
                [
              
              
                1
              
              
                ,
              
              
                2
              
              
                ,
              
              
                3
              
              
                ,
              
              
                50
              
              
                ,
              
              
                89
              
              
                ,
              
              
                26
              
              
                ,
              
              
                30
              
              
                ]
              
              
plus
              
                =
              
              
                [
              
              i
              
                *
              
              
                2
              
              
                +
              
              
                10
              
              
                for
              
               i 
              
                in
              
               alist
              
                ]
              
              
                # 簡單算術操作
              
              
                print
              
              
                (
              
              plus
              
                )
              
              
                # [12, 14, 16, 110, 188, 62, 70]
              
            
          

當然,如果是比較復雜的業務,需要多行代碼才能實現,那還是老老實實用for循環來實現吧。從這一點來說,列表推導式類似于函數中的lambda表達式,簡單的函數可以直接用lambda來表示。

列表推導式還可以實現嵌套,一般為了可讀性比較強,最多嵌套3層。

            
              
                ### demo3: 列表推導式的嵌套用法
              
              
alist
              
                =
              
              
                [
              
              
                1
              
              
                ,
              
              
                2
              
              
                ,
              
              
                5
              
              
                ]
              
              
blist
              
                =
              
              
                [
              
              
                'A'
              
              
                ,
              
              
                'B'
              
              
                ,
              
              
                'C'
              
              
                ]
              
              
combined
              
                =
              
              
                [
              
              b
              
                +
              
              
                '_'
              
              
                +
              
              
                str
              
              
                (
              
              a
              
                )
              
              
                for
              
               b 
              
                in
              
               blist 
              
                for
              
               a 
              
                in
              
               alist
              
                ]
              
              
                print
              
              
                (
              
              combined
              
                )
              
              
                # ['A_1', 'A_2', 'A_5', 'B_1', 'B_2', 'B_5', 'C_1', 'C_2', 'C_5']
              
              
                # demo4: 加入判斷條件: 只用奇數
              
              
combined2
              
                =
              
              
                [
              
              b
              
                +
              
              
                '_'
              
              
                +
              
              
                str
              
              
                (
              
              a
              
                )
              
              
                for
              
               b 
              
                in
              
               blist 
              
                for
              
               a 
              
                in
              
               alist 
              
                if
              
               a
              
                %
              
              
                2
              
              
                ==
              
              
                1
              
              
                ]
              
              
                print
              
              
                (
              
              combined2
              
                )
              
              
                # ['A_1', 'A_5', 'B_1', 'B_5', 'C_1', 'C_5']
              
            
          

2. 其他推導式

列表推導式并不僅僅適用于列表(list),還適用于其他序列類型,比如set, dict等。所以有的人將生成set的叫做集合推導式,把生成dict的叫做字典推導式。

集合推導式的用法和列表推導式一樣,只是將[]改為{}即可,但得到的集合元素之間如果重復,則僅僅保留一個,這是由set的特性:元素不能重復決定的。

            
              
                ### 集合推導式:
              
              
                ## demo1:
              
              
alist
              
                =
              
              
                [
              
              
                1
              
              
                ,
              
              
                2
              
              
                ,
              
              
                3
              
              
                ,
              
              
                50
              
              
                ,
              
              
                89
              
              
                ,
              
              
                26
              
              
                ,
              
              
                30
              
              
                ]
              
              
odd
              
                =
              
              
                {
              
              i 
              
                for
              
               i 
              
                in
              
               alist 
              
                if
              
               i
              
                %
              
              
                2
              
              
                ==
              
              
                1
              
              
                }
              
              
                # 選出列表alist中所有的奇數
              
              
                print
              
              
                (
              
              odd
              
                )
              
              
                # {89, 1, 3}
              
            
          

字典推導式的用法和列表推導式一樣,只是將[]改為{},但迭代的對象是一個字典類型。

使用字典推導式可以實現很多多樣化操作,比如下面將key,value互換。

            
              
                ### 字典推導式:
              
              
                # demo1: key,value互換;
              
              
dictA
              
                =
              
              
                {
              
              
                'a'
              
              
                :
              
              
                10
              
              
                ,
              
              
                'b'
              
              
                :
              
              
                20
              
              
                ,
              
              
                'c'
              
              
                :
              
              
                30
              
              
                }
              
              
changed
              
                =
              
              
                {
              
              value
              
                :
              
              key 
              
                for
              
               key
              
                ,
              
              value 
              
                in
              
               dictA
              
                .
              
              items
              
                (
              
              
                )
              
              
                }
              
              
                print
              
              
                (
              
              changed
              
                )
              
              
                # {10: 'a', 20: 'b', 30: 'c'}
              
            
          

還比如:單獨對keys進行迭代,可以選出keys滿足一定條件items組成新的dict

            
              
                ### demo2: 選出key是奇數的items
              
              
dictB
              
                =
              
              
                {
              
              
                1
              
              
                :
              
              
                '10'
              
              
                ,
              
              
                2
              
              
                :
              
              
                '20'
              
              
                ,
              
              
                3
              
              
                :
              
              
                '30'
              
              
                ,
              
              
                4
              
              
                :
              
              
                '40'
              
              
                }
              
              
odd_dict
              
                =
              
              
                {
              
              key
              
                :
              
              dictB
              
                [
              
              key
              
                ]
              
              
                for
              
               key 
              
                in
              
               dictB
              
                .
              
              keys
              
                (
              
              
                )
              
              
                if
              
               key
              
                %
              
              
                2
              
              
                ==
              
              
                1
              
              
                }
              
              
                print
              
              
                (
              
              odd_dict
              
                )
              
              
                # {1: '10', 3: '30'}
              
            
          

同理,也可以單獨對values進行迭代,選出values滿足一定條件的items組成新的dict.

3. 應用示例

列表推導式還有些其他應用場景,比如:

循環執行某個函數:

            
              
                # 循環執行某個函數:
              
              
                import
              
               time

              
                def
              
              
                func_test
              
              
                (
              
              x
              
                )
              
              
                :
              
              
                print
              
              
                (
              
              
                'start test: {}'
              
              
                .
              
              
                format
              
              
                (
              
              x
              
                )
              
              
                )
              
              
    time
              
                .
              
              sleep
              
                (
              
              
                1
              
              
                )
              
              
                print
              
              
                (
              
              
                'end test: {}'
              
              
                .
              
              
                format
              
              
                (
              
              x
              
                *
              
              
                2
              
              
                )
              
              
                )
              
              
                # 僅僅乘以2
              
              
                [
              
              func_test
              
                (
              
              x
              
                )
              
              
                for
              
               x 
              
                in
              
              
                range
              
              
                (
              
              
                10
              
              
                ,
              
              
                15
              
              
                ,
              
              
                2
              
              
                )
              
              
                ]
              
              
                # 使用列表推導式循環執行某個函數
              
            
          

start test: 10
end test: 20
start test: 12
end test: 24
start test: 14
end test: 28

循環執行函數,并獲取返回值:

            
              
                # 循環執行某個函數:
              
              
                import
              
               time

              
                def
              
              
                func_test
              
              
                (
              
              x
              
                )
              
              
                :
              
              
                print
              
              
                (
              
              
                'start test: {}'
              
              
                .
              
              
                format
              
              
                (
              
              x
              
                )
              
              
                )
              
              
    time
              
                .
              
              sleep
              
                (
              
              
                1
              
              
                )
              
              
                print
              
              
                (
              
              
                'end test: {}'
              
              
                .
              
              
                format
              
              
                (
              
              x
              
                *
              
              
                2
              
              
                )
              
              
                )
              
              
                # 僅僅乘以2
              
              
                return
              
               x
              
                *
              
              
                2
              
              
result
              
                =
              
              
                [
              
              func_test
              
                (
              
              x
              
                )
              
              
                for
              
               x 
              
                in
              
              
                range
              
              
                (
              
              
                10
              
              
                ,
              
              
                15
              
              
                ,
              
              
                2
              
              
                )
              
              
                ]
              
              
                # 使用列表推導式循環執行某個函數
              
              
                print
              
              
                (
              
              result
              
                )
              
              
                # [20, 24, 28]
              
            
          

通過列表推導式和字典推導式的靈活運用,可以將dict類型數據和list數據相互轉化,比如:

            
              
                # 由list生成字典:
              
              
blist
              
                =
              
              
                [
              
              
                'A'
              
              
                ,
              
              
                'B'
              
              
                ,
              
              
                'C'
              
              
                ]
              
              
dict_from_list
              
                =
              
              
                {
              
              b
              
                :
              
              
                str
              
              
                (
              
              idx
              
                +
              
              
                10
              
              
                )
              
              
                for
              
               idx
              
                ,
              
              b 
              
                in
              
              
                enumerate
              
              
                (
              
              blist
              
                )
              
              
                }
              
              
                print
              
              
                (
              
              dict_from_list
              
                )
              
              
                # {'A': '10', 'B': '11', 'C': '12'}
              
              
                # 由dict生成list
              
              
dictB
              
                =
              
              
                {
              
              
                1
              
              
                :
              
              
                '10'
              
              
                ,
              
              
                2
              
              
                :
              
              
                '20'
              
              
                ,
              
              
                3
              
              
                :
              
              
                '30'
              
              
                ,
              
              
                4
              
              
                :
              
              
                '40'
              
              
                }
              
              
list_from_dict
              
                =
              
              
                [
              
              key 
              
                for
              
               key
              
                ,
              
              _ 
              
                in
              
               dictB
              
                .
              
              items
              
                (
              
              
                )
              
              
                if
              
               key
              
                %
              
              
                2
              
              
                ==
              
              
                0
              
              
                ]
              
              
                # 選出偶數的key
              
              
                print
              
              
                (
              
              list_from_dict
              
                )
              
              
                # [2, 4]
              
            
          

首次發表于: 微信公眾號:科技老丁哥,ID: TechDing,敬請關注。

本文所有代碼都已經上傳到我的github,歡迎下載

參考資料:

  1. 《流暢的Python》,Luciano Ramalho (作者) 安道 , 吳珂 (譯者)。

更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产精品欧美日韩一区二区 | 亚洲国产男人本色在线观看的a站 | 久久在线观看免费视频 | 不卡中文字幕在线观看 | 亚洲一区日韩 | 99热精品在线 | 久久精品亚洲乱码伦伦中文 | a毛毛片| 欧美国产精品不卡在线观看 | 中文一区 | 亚洲第一在线 | 日日摸夜夜添夜夜添久久 | 亚洲欧美精品日韩欧美 | 成人精品视频 成人影院 | 精品久久免费观看 | 91福利视频合集 | 日本毛片在线观看 | 日本欧美一区二区三区在线 | 午夜不卡福利 | 精品国产一区二区三区久久 | 亚洲精品国产福利在线观看 | 日韩毛片最新看 | 亚洲高清一区二区三区 | 亚洲区 欧美区 | 国产一区二区三区在线 | 国产日日操 | 九色视频网站 | 欧美色综合图区 | 日韩视频一区 | 免费看美女吃男生私人部位 | 午夜视频福利在线 | 九九视频免费观看 | 日韩毛片免费 | 奇米青青草 | 国产一区二区网站 | 久久婷婷五夜综合色频 | 四虎永久在线观看免费网站网址 | 国产成人三级 | 欧美夜夜操 | 瑟瑟在线观看 | 亚洲欧美视频一区二区三区 |