• Python面试题之列表推导式


    题目要求:

    生成如下列表

    [[0,0,0,0,0,],[0,1,2,3,4,],[0,2,4,6,8,],[0,3,6,9,12,]]

    (考察列表生成式和基本逻辑推理)

    方法1:

    list1 = []
    for in range(4):
        temp = []
        for j in range(5):
            temp.append(j*i)
        list1.append(temp)
    
    print(list1)

    方法2:

    list1 =[[ i*j for j in range(5)] for i in range(4)]
    print(list1)

    Python列表推导式介绍

    列表推导式是Python中快速创建列表的一种方式。

    之前我们要创建(Python3中)一个元素是0~9的列表,我们可能会像下面这么写:

    >>>list(range(10))
    [0,1,2,3,4,5,6,7,8,9]

    这么写没毛病,但是如果要稍微复杂一点的需求可能就有点棘手了,比如

    把列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]中的每个元素都加100,生成一个新列表,这要怎么写呢?

    一级学徒可能会这么写:

    >>>list1 = [0,1,2,3,4,5,6,7,8,9]
    >>>list2 = []
    >>>for i in list1:
    ...        list2.append(i+100)
    ...
    >>>list2
    [100,101,102,103,104,105,106,107,108,109]

    二级学徒可能会这么写:

    >>>list2 = list(map(lambda x:x+100,list1))
    >>>list2
    [100, 101, 102, 103, 104, 105, 106, 107, 108, 109]

    注意: Python3中map函数返回的是一个迭代器,需要转成list类型。更多详情请阅读我之前的关于map函数的文章。

    高级学徒可能会这么写:

    >>>list2 = [i+100 for i in list1]
    >>>listt2
    [100, 101, 102, 103, 104, 105, 106, 107, 108, 109]

    好啦,这第三种写法就是今天我们要讲的列表推导式。

    接下来我们看一下,列表推导式的语法规范是什么,看下图:

    列表推导式案例

    1. 只有输出表达式和输入序列的基本列表推导式

    >>>list1 = [1,2,3]
    >>>[x*10 for x in list1]
    [10,20,30]

    2. 带有条件判断的列表推导式

    >>>list1 = [1,2,3]
    >>>[x*10 for x in list1 if x%2!=0]  #把list1中的奇数乘以10
    [10,30]

    3.多个输入序列的列表推导式

    list1 = ["A","B","C"]
    list2 = ["X","Y","Z"]
    >>>[x+y for x in list1 for y in list2]
    ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

     注意:使用列表推导式生成的列表虽然十分方便,但是它生成的列表的所有元素会直接在内存中生成,当你要生成的列表元素个数十分巨大的时候,要注意小心你的内存。

  • 相关阅读:
    常用验证函数isset()/empty()/is_numeric()函数
    jquery select取option的value值发生变化事件
    (转)浅谈HTML5与css3画饼图!
    文本框输入值文字消失常用的两种方法
    简洁的滚动代码(上下滚动)
    (转)PHP的语言结构和函数的区别
    兼容ie7的导航下拉菜单
    jquery中each()函数
    tomcat源码导入eclipse
    weblogic linux环境下新建domain
  • 原文地址:https://www.cnblogs.com/JetpropelledSnake/p/9123384.html
Copyright © 2020-2023  润新知