python中的列表推导式

系统 1488 0

序言

python的列表对象是这个语言提供的最通用的序列,列表是一个任意类型的对象的位置相关的有序集合,它没有固定的大小。不像字符串,其大小是可变的,通过对偏移量进行赋值以及其他各种列表的方法进行调用,确实能够修改列表的大小。列表的形式如下

            
              
                >>
              
              
                >
              
               A 
              
                =
              
              
                [
              
              
                'apple'
              
              
                ,
              
              
                1
              
              
                ,
              
              
                [
              
              
                1
              
              
                ,
              
              
                2
              
              
                ,
              
              
                'peach'
              
              
                ]
              
              
                ,
              
              
                2
              
              
                ]
              
            
          

列表可以包含多种元素,可以进行嵌套,带有多种方法(具体的方法,可以查看相关手册),通过这些方法,列表可以有很多功能,例如可以当做栈,队列(低效,一般不用)等,下面我们主要介绍 列表推导式 的使用。

主体内容

列表推导式提供了一个更简单的创建列表的方法。常见的用法是把某种操作应用于序列或可迭代对象的每个元素上,然后使用其结果来创建列表,或者通过满足某些特定条件元素来创建子序列
例如,我们通常创建一个列表,是这样的姿势

            
              
                >>
              
              
                >
              
               squares 
              
                =
              
              
                [
              
              
                ]
              
              
                >>
              
              
                >
              
              
                for
              
               x 
              
                in
              
              
                range
              
              
                (
              
              
                10
              
              
                )
              
              
                :
              
              
                .
              
              
                .
              
              
                .
              
                   squares
              
                .
              
              append
              
                (
              
              x
              
                **
              
              
                2
              
              
                )
              
              
                .
              
              
                .
              
              
                .
              
              
                >>
              
              
                >
              
               squares

              
                [
              
              
                0
              
              
                ,
              
              
                1
              
              
                ,
              
              
                4
              
              
                ,
              
              
                9
              
              
                ,
              
              
                16
              
              
                ,
              
              
                25
              
              
                ,
              
              
                36
              
              
                ,
              
              
                49
              
              
                ,
              
              
                64
              
              
                ,
              
              
                81
              
              
                ]
              
            
          

但是,我们也可以这样创建

            
              squares 
              
                =
              
              
                [
              
              x
              
                **
              
              
                2
              
              
                for
              
               x 
              
                in
              
              
                range
              
              
                (
              
              
                10
              
              
                )
              
              
                ]
              
            
          

它们的结果是一样的,但第二种方法更加简洁易读。
列表推导式 的结构是由 一对方括号 所包含的以下内容: 一个表达式,后面跟一个 for 子句,然后是零个或多个 for 或 if 子句 。 其结果将是一个新列表,由对表达式依据后面的 for 和 if 子句的内容进行求值计算而得出。例如下面的例子。

            
              
                >>
              
              
                >
              
              
                [
              
              
                (
              
              x
              
                ,
              
               y
              
                )
              
              
                for
              
               x 
              
                in
              
              
                [
              
              
                1
              
              
                ,
              
              
                2
              
              
                ,
              
              
                3
              
              
                ]
              
              
                for
              
               y 
              
                in
              
              
                [
              
              
                3
              
              
                ,
              
              
                1
              
              
                ,
              
              
                4
              
              
                ]
              
              
                if
              
               x 
              
                !=
              
               y
              
                ]
              
              
                [
              
              
                (
              
              
                1
              
              
                ,
              
              
                3
              
              
                )
              
              
                ,
              
              
                (
              
              
                1
              
              
                ,
              
              
                4
              
              
                )
              
              
                ,
              
              
                (
              
              
                2
              
              
                ,
              
              
                3
              
              
                )
              
              
                ,
              
              
                (
              
              
                2
              
              
                ,
              
              
                1
              
              
                )
              
              
                ,
              
              
                (
              
              
                2
              
              
                ,
              
              
                4
              
              
                )
              
              
                ,
              
              
                (
              
              
                3
              
              
                ,
              
              
                1
              
              
                )
              
              
                ,
              
              
                (
              
              
                3
              
              
                ,
              
              
                4
              
              
                )
              
              
                ]
              
            
          

它等价于

            
              
                >>
              
              
                >
              
               combs 
              
                =
              
              
                [
              
              
                ]
              
              
                >>
              
              
                >
              
              
                for
              
               x 
              
                in
              
              
                [
              
              
                1
              
              
                ,
              
              
                2
              
              
                ,
              
              
                3
              
              
                ]
              
              
                :
              
              
                .
              
              
                .
              
              
                .
              
              
                for
              
               y 
              
                in
              
              
                [
              
              
                3
              
              
                ,
              
              
                1
              
              
                ,
              
              
                4
              
              
                ]
              
              
                :
              
              
                .
              
              
                .
              
              
                .
              
              
                if
              
               x 
              
                !=
              
               y
              
                :
              
              
                .
              
              
                .
              
              
                .
              
                           combs
              
                .
              
              append
              
                (
              
              
                (
              
              x
              
                ,
              
               y
              
                )
              
              
                )
              
              
                .
              
              
                .
              
              
                .
              
              
                >>
              
              
                >
              
               combs

              
                [
              
              
                (
              
              
                1
              
              
                ,
              
              
                3
              
              
                )
              
              
                ,
              
              
                (
              
              
                1
              
              
                ,
              
              
                4
              
              
                )
              
              
                ,
              
              
                (
              
              
                2
              
              
                ,
              
              
                3
              
              
                )
              
              
                ,
              
              
                (
              
              
                2
              
              
                ,
              
              
                1
              
              
                )
              
              
                ,
              
              
                (
              
              
                2
              
              
                ,
              
              
                4
              
              
                )
              
              
                ,
              
              
                (
              
              
                3
              
              
                ,
              
              
                1
              
              
                )
              
              
                ,
              
              
                (
              
              
                3
              
              
                ,
              
              
                4
              
              
                )
              
              
                ]
              
            
          

列表推导式可以使用复杂的表达式和嵌套函数

            
              
                >>
              
              
                >
              
              
                from
              
               math 
              
                import
              
               pi

              
                >>
              
              
                >
              
              
                [
              
              
                str
              
              
                (
              
              
                round
              
              
                (
              
              pi
              
                ,
              
               i
              
                )
              
              
                )
              
              
                for
              
               i 
              
                in
              
              
                range
              
              
                (
              
              
                1
              
              
                ,
              
              
                6
              
              
                )
              
              
                ]
              
              
                [
              
              
                '3.1'
              
              
                ,
              
              
                '3.14'
              
              
                ,
              
              
                '3.142'
              
              
                ,
              
              
                '3.1416'
              
              
                ,
              
              
                '3.14159'
              
              
                ]
              
            
          

列表推导式也支持嵌套,如下代码所示

            
              
                >>
              
              
                >
              
               matrix 
              
                =
              
              
                [
              
              
                .
              
              
                .
              
              
                .
              
              
                [
              
              
                1
              
              
                ,
              
              
                2
              
              
                ,
              
              
                3
              
              
                ,
              
              
                4
              
              
                ]
              
              
                ,
              
              
                .
              
              
                .
              
              
                .
              
              
                [
              
              
                5
              
              
                ,
              
              
                6
              
              
                ,
              
              
                7
              
              
                ,
              
              
                8
              
              
                ]
              
              
                ,
              
              
                .
              
              
                .
              
              
                .
              
              
                [
              
              
                9
              
              
                ,
              
              
                10
              
              
                ,
              
              
                11
              
              
                ,
              
              
                12
              
              
                ]
              
              
                ,
              
              
                .
              
              
                .
              
              
                .
              
              
                ]
              
            
          

下面的列表推导式将交换其行和列

            
              
                >>
              
              
                >
              
              
                [
              
              
                [
              
              row
              
                [
              
              i
              
                ]
              
              
                for
              
               row 
              
                in
              
               matrix
              
                ]
              
              
                for
              
               i 
              
                in
              
              
                range
              
              
                (
              
              
                4
              
              
                )
              
              
                ]
              
              
                [
              
              
                [
              
              
                1
              
              
                ,
              
              
                5
              
              
                ,
              
              
                9
              
              
                ]
              
              
                ,
              
              
                [
              
              
                2
              
              
                ,
              
              
                6
              
              
                ,
              
              
                10
              
              
                ]
              
              
                ,
              
              
                [
              
              
                3
              
              
                ,
              
              
                7
              
              
                ,
              
              
                11
              
              
                ]
              
              
                ,
              
              
                [
              
              
                4
              
              
                ,
              
              
                8
              
              
                ,
              
              
                12
              
              
                ]
              
              
                ]
              
            
          

更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论