Python學習筆記:列表推導式


一、介紹

Python 中有個語法糖(syntactic sugar),就是 list comprehension,即“列表推導式”。

同樣適用於 dictset 等一系列可迭代的數據結構。

  • 使用語法
out_list = [x for x in list if express_condition]

其中的 if 條件判斷語句可有可無。

二、range函數

Pythonrange 函數可以用來創建一個整數列表,一般用在 for 循環中。

  • 使用語法
range(start, stop, [, step])
start -- 開始
stop -- 結束(不包含)
setp -- 步長

列表推導式是通過一個可迭代對象來生成列表,range 是列表推導式中最常用的可迭代對象,是精髓之一。

三、實操

1.列表推導式

  • 列表推導式會遍歷可迭代對象,然后按照 for 前的表達式進行運算,生成最終的列表
  • 如果有 if 條件語句, for 遍歷后緊跟着進行條件判斷
  • 如果有多個 for 循環,則最終的數據數量為多個 for 循環的笛卡爾積
  • 可以進行嵌套的列表推導,與嵌套 for 循環的原理相同
[x**2 for x in range(10)]
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

[x**2 for x in range(10) if x > 5]
# [36, 49, 64, 81]

[x for x in range(10) if x % 2 == 0]
# [0, 2, 4, 6, 8]

[(x, x**2) for x in range(5)]
# [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16)]

dict([(x, x**2) for x in range(5)])
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

[(x, y) for x in range(10) if x % 2 if x > 3 for y in range(10) if y > 7 if y != 8]
# [(5, 9), (7, 9), (9, 9)]

a = [2,4,6]
b = [4,3,-9]
[a[i] + b[i] for i in range(len(a))]
# [6, 7, -3]

[x * y for x in [1,2,3] for y in [1,2,3]]
# [1, 2, 3, 2, 4, 6, 3, 6, 9]

li = [1,2,3,4]
def mul2(x):
    return x*2
[mul2(i) for i in li]
# [2, 4, 6, 8]

# 嵌套循環 展平矩陣
matrix = [[1,2,3], [4,5,6], [7,8,9]]
[i for row in matrix for i in row]
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

2.字典(dict)和集合(set)推導式

  • 將字典key和value互換
dic = {'a':10, 'b':20, 'c':30}
{value: key for key, value in dic.items()} # 返回鍵值對
# {10: 'a', 20: 'b', 30: 'c'}
  • 提取首字母
words_list = ['apple', 'oppo', 'vivo', 'xiaomi']
set(w[0] for w in words_list)
# {'a', 'o', 'v', 'x'}

集合是無序且不重復的,會自動去掉重復的元素。

三、總結

總的來說,就是把普通的多行 for 循環壓縮成一行代碼。

這種壓縮語法適用於列表、字典、集合等可迭代數據結構。

  • 代碼可讀性 只需要一行代碼
  • 局部作用域 不存在變量泄露問題
  • 盡量保持簡潔

參考鏈接:Python的列表推導式

參考鏈接:Python中的列表推導式

參考鏈接:Python列表推導式


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM