首頁 > 後端開發 > Python教學 > 列出Python中的綜合

列出Python中的綜合

Joseph Gordon-Levitt
發布: 2025-03-07 11:29:08
原創
484 人瀏覽過

List Comprehensions in Python

Python 列表推導式提供了一種簡潔的編寫代碼方式,它允許您同時計算表達式的值並將其賦值給變量。使用 walrus 運算符(:=),我們可以優化代碼:

square_cubes = [res if (res := n**2) % 9 == 0 or res % 4 == 0 else n**3 for n in range(1, 11)]
print(square_cubes)  # 输出: [1, 4, 9, 16, 125, 36, 343, 64, 81, 100]
登入後複製

這裡,我們將 res 變量存儲計算結果 n**2,並在後續代碼中復用,避免重複計算。

嵌套循環的列表推導式

列表推導式支持嵌套循環,for 循環數量沒有限制。但需注意,循環順序需與原始代碼一致。每個 for 循環後還可以添加可選的 if 條件。嵌套 for 循環的列表推導式結構如下:

[ <表达式> for <元素a> in <可迭代对象a> (可选 if <条件a>)
              for <元素b> in <可迭代对象b> (可选 if <条件b>)
              for <元素c> in <可迭代对象c> (可选 if <条件c>)
              ... ]
登入後複製

以下示例演示了嵌套循環的列表推導式,用於生成乘法表:

multiplications = []
for i in range(1, 4):
    for n in range(1, 11):
        multiplications.append(i*n)
print(multiplications) # 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
登入後複製

將其轉換為列表推導式:

multiplications = [i*n for i in range(1,4) for n in range(1,11)]
print(multiplications) # 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
登入後複製

列表推導式還可以用於扁平化嵌套列表:

matrix = [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12],
]
flatten = [n for row in matrix for n in row]
print(flatten) # 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
登入後複製

嵌套列表推導式

嵌套列表推導式與嵌套循環的列表推導式不同。前者是推導式內部嵌套推導式,後者是循環內部嵌套循環。例如,矩陣轉置:

使用普通循環:

matrix = [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12],
]
transpose = []
for i in range(4):
    temp = []
    for row in matrix:
        temp.append(row[i])
    transpose.append(temp)
print(transpose) # 输出: [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
登入後複製

使用嵌套列表推導式:

matrix = [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12],
]
transpose = [[row[n] for row in matrix] for n in range(4)]
print(transpose) # 输出: [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
登入後複製

集合和字典推導式

列表推導式的概念也適用於集合和字典推導式。字典用於存儲鍵值對:

squares_cubes = {n: n**2 if n%2 == 0 else n**3 for n in range(1,11)}
print(squares_cubes) # 输出: {1: 1, 2: 4, 3: 27, 4: 16, 5: 125, 6: 36, 7: 343, 8: 64, 9: 729, 10: 100}
登入後複製

集合推導式用於創建無序集合:

import random
non_multiples = {n for n in random.sample(range(0, 1001), 20) if n not in range(0, 1001, 9)}
print(non_multiples) # 输出 (示例): {3, 165, 807, 574, 745, 266, 616, 44, 12, 910, 336, 145, 755, 179, 25, 796, 926}
登入後複製

總結

本文介紹了 Python 列表推導式及其在代碼優化中的應用,包括嵌套循環、嵌套推導式以及集合和字典推導式。 需要注意的是,對於復雜的嵌套循環,為了提高代碼可讀性,可以將列表推導式拆分成多行。 建議根據實際情況選擇合適的方法,兼顧代碼效率和可讀性。

以上是列出Python中的綜合的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板