最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python進階之推導式的實現

 更新時間:2025年08月24日 08:23:29   作者:青銅發(fā)條  
Python推導式是一種簡潔高效的數據處理語法,包括列表、字典、集合和生成器四種形式,下面就具體來介紹一下,感興趣的可以了解一下

一、推導式介紹

Python推導式(Comprehension)是一種簡潔、優(yōu)雅的語法結構,可以用單行代碼快速創(chuàng)建列表、字典、集合等數據結構。它基于現有的可迭代對象,通過表達式和條件語句來生成新的數據集合。

不僅讓代碼更加簡潔易讀,而且在大多數情況下比傳統(tǒng)的循環(huán)方式執(zhí)行效率更高。

二、推導式的用法

Python 推導式是一種獨特的數據處理方式,可以從一個數據序列構建另一個新的數據序列的結構體。

Python 支持推導式的數據結構有:

  • 列表(list)推導式
  • 字典(dict)推導式
  • 集合(set)推導式
  • 元組(tuple)推導式

2.1 列表推導式

列表推導式是最常見的形式,用于創(chuàng)建新的列表。

基本語法:

[expression for item in iterable if condition]

示例:

# 傳統(tǒng)方式
squares = []
for x in range(10):
    squares.append(x**2)

# 列表推導式
squares = [x**2 for x in range(10)]
print(squares)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

帶條件的列表推導式:

# 只保留偶數平方
even_squares = [x**2 for x in range(10) if x % 2 == 0]
print(even_squares)  # [0, 4, 16, 36, 64]

# 使用條件表達式
results = ["偶數" if x % 2 == 0 else "奇數" for x in range(5)]
print(results)  # ['偶數', '奇數', '偶數', '奇數', '偶數']

嵌套循環(huán)的列表推導式:

# 生成所有可能的坐標對
coordinates = [(x, y) for x in range(3) for y in range(3)]
print(coordinates)  # [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

2.2 字典推導式

字典推導式用于創(chuàng)建字典,語法與列表推導式類似。

基本語法:

{key_expression: value_expression for item in iterable if condition}

示例:

# 創(chuàng)建數字到其平方的映射
squares_dict = {x: x**2 for x in range(5)}
print(squares_dict)  # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

# 反轉字典的鍵和值
original = {'a': 1, 'b': 2, 'c': 3}
reversed_dict = {v: k for k, v in original.items()}
print(reversed_dict)  # {1: 'a', 2: 'b', 3: 'c'}

# 帶條件的字典推導式
even_squares = {x: x**2 for x in range(10) if x % 2 == 0}
print(even_squares)  # {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}

2.3 集合推導式

集合推導式用于創(chuàng)建集合,會自動去除重復元素。

基本語法:

{expression for item in iterable if condition}

示例:

# 從列表中創(chuàng)建不重復的平方數集合
numbers = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
unique_squares = {x**2 for x in numbers}
print(unique_squares)  # {16, 1, 9, 4}

# 帶條件的集合推導式
even_squares = {x**2 for x in range(10) if x % 2 == 0}
print(even_squares)  # {0, 64, 4, 36, 16}

2.4 生成器表達式

生成器表達式使用圓括號,與列表推導式類似,但返回一個生成器對象,按需生成值,節(jié)省內存。

基本語法:

(expression for item in iterable if condition)

示例:

# 創(chuàng)建生成器
squares_gen = (x**2 for x in range(10))

# 使用生成器
print(next(squares_gen))  # 0
print(next(squares_gen))  # 1

# 可以轉換為列表
print(list(squares_gen))  # [4, 9, 16, 25, 36, 49, 64, 81]

# 在函數中使用
total = sum(x**2 for x in range(10))
print(total)  # 285

三、推導式的嵌套和復雜用法

3.1 嵌套推導式

# 二維列表展平
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [num for row in matrix for num in row]
print(flattened)  # [1, 2, 3, 4, 5, 6, 7, 8, 9]

# 轉置矩陣
transposed = [[row[i] for row in matrix] for i in range(3)]
print(transposed)  # [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

3.2 多重條件推導式

# 多個條件
numbers = [x for x in range(20) if x % 2 == 0 if x % 3 == 0]
print(numbers)  # [0, 6, 12, 18]

# 復雜的條件表達式
categorized = ["大偶數" if x > 5 and x % 2 == 0 else 
               "小偶數" if x % 2 == 0 else 
               "大奇數" if x > 5 else 
               "小奇數" for x in range(10)]
print(categorized)

四、推導式對比傳統(tǒng)循環(huán)

4.1 性能比較

推導式通常比等效的循環(huán)更快,因為它們在底層使用了優(yōu)化的C代碼。

import timeit
# 測試列表推導式性能
list_comp_time = timeit.timeit('[x**2 for x in range(1000)]', number=10000)
loop_time = timeit.timeit('''
result = []
for x in range(1000):
    result.append(x**2)
''', number=10000)

print(f"列表推導式: {list_comp_time:.3f}秒")
print(f"傳統(tǒng)循環(huán): {loop_time:.3f}秒")

4.2 可讀性比較

雖然推導式更簡潔,但過度復雜的推導式可能會降低可讀性:

# 可讀性好的推導式
good_example = [x**2 for x in range(10) if x % 2 == 0]

# 過于復雜的推導式(不推薦)
bad_example = [[x*y for y in range(10) if y % 2 == 0] for x in range(10) if x % 3 == 0]

建議:當推導式變得復雜難以理解時,考慮使用傳統(tǒng)的循環(huán)結構。

五、常見應用場景

5.1 數據清洗和轉換

# 從字符串中提取數字并轉換為整數
data = ["價格: 100元", "重量: 2.5kg", "數量: 15個"]
numbers = [float(''.join(filter(str.isdigit, item))) for item in data]
print(numbers)  # [100.0, 25.0, 15.0]

5.2 文件處理

# 讀取文件并處理行
with open('data.txt', 'r') as file:
    lines = [line.strip().upper() for line in file if line.strip()]

5.3 API數據處理

# 從API響應中提取特定信息
api_response = [
    {'name': 'Alice', 'age': 25, 'active': True},
    {'name': 'Bob', 'age': 30, 'active': False},
    {'name': 'Charlie', 'age': 35, 'active': True}
]

active_users = [user['name'] for user in api_response if user['active']]
print(active_users)  # ['Alice', 'Charlie']

六、注意事項

  • 避免過度復雜:如果推導式變得難以閱讀,考慮使用傳統(tǒng)循環(huán)
  • 注意內存使用:大型數據集考慮使用生成器表達式
  • 保持可讀性:適當的空格和換行可以提高復雜推導式的可讀性
  • 不要濫用:推導式不是所有循環(huán)的替代品,選擇合適的工具
# 可讀性更好的復雜推導式
result = [
    (x, y, z)
    for x in range(10)
    for y in range(10)
    for z in range(10)
    if x + y + z > 15
    and x % 2 == 0
    and y % 2 != 0
]

print(result)

參考

到此這篇關于python進階之推導式的實現的文章就介紹到這了,更多相關python 推導式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

相關文章

  • 對python字典過濾條件的實例詳解

    對python字典過濾條件的實例詳解

    今天小編就為大家分享一篇對python字典過濾條件的實例詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python docx庫代碼演示

    Python docx庫代碼演示

    這篇文章主要介紹了Python docx庫用法,結合實例形式分析了docx庫相關的docx文件讀取、文本添加、格式操作,需要的朋友可以參考下
    2021-10-10
  • python基于socket實現網絡廣播的方法

    python基于socket實現網絡廣播的方法

    這篇文章主要介紹了python基于socket實現網絡廣播的方法,涉及Python操作socket的相關技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • 利用PyQt中的QThread類實現多線程

    利用PyQt中的QThread類實現多線程

    本文主要給大家分享的是python實現多線程及線程間通信的簡單方法,非常的實用,有需要的小伙伴可以參考下
    2020-02-02
  • Django Admin 實現外鍵過濾的方法

    Django Admin 實現外鍵過濾的方法

    下面小編就為大家?guī)硪黄狣jango Admin 實現外鍵過濾的方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 用Python制作簡單的鋼琴程序的教程

    用Python制作簡單的鋼琴程序的教程

    這篇文章主要介紹了用Python制作簡單的鋼琴程序的教程,用鍵盤演奏、包括變速和變調等功能的實現,需要的朋友可以參考下
    2015-04-04
  • python按照多個字符對字符串進行分割的方法

    python按照多個字符對字符串進行分割的方法

    這篇文章主要介紹了python按照多個字符對字符串進行分割的方法,涉及Python中正則表達式匹配的技巧,非常具有實用價值,需要的朋友可以參考下
    2015-03-03
  • python從內存地址上加載python對象過程詳解

    python從內存地址上加載python對象過程詳解

    這篇文章主要介紹了python從內存地址上加載pythn對象過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • 深入分析python中整型不會溢出問題

    深入分析python中整型不會溢出問題

    本文給大家通過實例和原理深入分析了python中整型不會溢出的相關知識點,有興趣的朋友可以跟著學習下。
    2018-06-06
  • python使用7z解壓apk包的方法

    python使用7z解壓apk包的方法

    這篇文章主要介紹了python使用7z解壓apk包的方法,涉及Python的shell命令調用技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04

最新評論

凤山市| 临沭县| 松滋市| 海兴县| 南阳市| 巫溪县| 乌什县| 清水河县| 邓州市| 顺昌县| 日照市| 卓资县| 洮南市| 车险| 定边县| 祥云县| 裕民县| 措美县| 平顶山市| 正阳县| 阿拉善左旗| 蓝山县| 突泉县| 新竹市| 阳山县| 涞源县| 博罗县| 大田县| 萨嘎县| 白河县| 洛阳市| 格尔木市| 兴安盟| 资溪县| 大竹县| 万荣县| 蒙自县| 北辰区| 霍州市| 敦化市| 获嘉县|