【python实用特性】- 列表生成式


列表生成式,指在列表中,按照一定规则,快速生成列表元素的方式。
接下来,我们举几个例子,看下普通的列表生成与使用列表生成式在书写及性能上有何区别。

1、生成一个包含10000000个元素的列表
  • 普通实现

    import time
    start_time = time.time()
    data = []
    for i in range(10000*1000):
        data.append(i)
    end_time = time.time()
    print('用时:%s'%(end_time-start_time))
    

    结果:
    普通模式

  • 列表生成式

    import time
    start_time = time.time()
    data = [i for i in range(10000000)]  #列表生成式
    end_time = time.time()
    print('用时:%s'%(end_time-start_time))
    

    结果:
    生成式
    分析:

    • 普通模式使用三行代码,列表生成式仅用一行,列表生成式更为简洁优雅。
    • 由运行所用时长可看出,列表生成式速度更快,效率更高。
    • 列表生成式,前面为表达式,后面为for循环
2、求0~100之间的所有奇数

思路:
step1、循环0~100
step2、用模运算判断是否是奇数

  • 普通实现

    result = []
    for i in range(100):
        if i % 2 != 0:
            result.append(i)
    
  • 列表生成式

    result = [i for i in range(100) if i % 2 != 0]
    

    分析:

    • 列表生成式同样是一行代码搞定,十分简洁
    • for循环后可以通过if进行元素筛选
3、元素筛选及处理

上面两个例子很简单,当然,列表生成式的功能远不止于此。下面,我们完成一些稍微复杂的需求。

  • 求0~100的所有奇数的平方
    实例2的变种,做个小修改即可。

    result = [i*i for i in range(100) if i % 2 != 0]
    
  • 将所给字符串列表的所有小写元素改为大写,大写改为小写
    step1、循环列表
    step2、判断是否是大写元素,s.lower()!=s

    s = ['jc','YF','xbz']
    result = [i.lower() if i.lower()!=i else i.upper() for i in s]
    print(result)
    

    结果:

    ['JC', 'yf', 'XBZ']
    
  • 将所给列表的元素、下标对应组成字典
    注:列表需为字符串列表

    s = ['jc','dbz','yf','xdg']
    result = [{value:index} for index,value in enumerate(s)]
    

    结果:

    [{'jc': 0}, {'dbz': 1}, {'yf': 2}, {'xdg': 3}]
    
4、错误语法示范
#if在for循环后,加else报错
result = [i for i in range(100) if i % 2 != 0 else]

#表达式执行多行语句
result = [i+=1;i*i for i in range(100)]

报错:
报错

5、总结

 1、列表生成式能大幅度简化代码、使其更为简洁优雅
 2、能有效提高代码效率
 3、可对列表元素进行筛选处理
   (1)单个条件判断,if写在for循环后,后面不能跟else
   (2)if…else判断写在for循环之前

 4、元素表达式只能进行单语句操作

参考文章:
[1] 列表生成式-廖雪峰的官方网站

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章