【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] 列表生成式-廖雪峯的官方網站

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