16.Python编程:列表推导式

作者: TensorFlow开发者 | 来源:发表于2018-04-09 20:54 被阅读7次

    List Comprehensions[ˌkɒmprɪˈhenʃns]:列表推导式


    前面在学习Python基本数据类型时,学习了list。今天学习和列表关系紧密、简单但功能十分强大的知识点:列表推导式。
    例如,要生成一个[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],前面在学习循环知识时,拓展学习了range()函数。所以借用range()函数:

    # 生成一个[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    my_list = list(range(1, 11))
    print(my_list)
    

    运行结果:

    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    

    如果,要得到[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]呢?则可以这样实现:

    # 生成一个[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    my_list = list(range(1, 11))
    print(my_list)
    
    # 定义一个容器,来盛放1, 4, 9, 16, 25, 36, 49, 64, 81, 100
    my_list2 = []
    for i in my_list:
        my_list2.append(i * i)
        
    # 打印my_list2
    print(my_list2)
    

    运行结果:

    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
    

    尽管能实现目标,但略显繁琐。如果是用列表推导式,则会非常简洁:

    # 利用列表推导式
    my_list3 = [x*x for x in range(1, 11)]
    print(my_list3)
    

    运行结果:
    [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
    解析:
    写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来,

    拓展

    for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方, 带条件的列表推导式:

    # 带条件的列表推导式
    my_list4 = [x * x for x in range(1, 11) if x % 2 == 0]
    print(r'my_list4 =', my_list4)
    

    运行结果:

    my_list4 = [4, 16, 36, 64, 100]
    

    其他实例,利用列表推导式,将list中的字母大写转换为小写:

    # 列表推导式
    my_list5 = [s.lower() for s in ['HelLo', 'woRld']]
    print(r'my_list5 =', my_list5)
    

    运行结果:

    my_list5 = ['hello', 'world']
    

    还可以使用两层循环,可以生成全排列:

    # 列表推导式 循环嵌套
    my_list6 = [x + y for x in 'ABC' for y in 'XYZ']
    print(r'my_list6 =', my_list6)
    

    运行结果:

    my_list6 = ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
    

    提示

    要注意:由于受到内存限制,列表推导式适用于列表容量不是特别大的列表等。如果是百万级别的数据量的list,列表推导式就不适用了。在数据量非常大时,就要用到前面学习过的生成器了。

    小结

    本文重点学习Python中的列表推导式:代码简洁但功能强大。在以后的可视图像绘制中,函数会常常用到这一知识点,要熟练掌握。


    更多了解,可关注公众号:人人懂编程


    微信公众号:人人懂编程

    相关文章

      网友评论

        本文标题:16.Python编程:列表推导式

        本文链接:https://www.haomeiwen.com/subject/umzihftx.html