09_常用內置模塊進階

第9課:常用內置模塊進階

課程目標

  • 深入學習Python常用內置模塊
  • 掌握collections、itertools、functools等模塊
  • 學習json、csv、pickle等數據處理模塊

1. collections模塊

1.1 Counter類

from collections import Counter# 統計元素出現次數
text = "hello world python programming"
char_count = Counter(text)
print("字符統計:", char_count)# 統計單詞出現次數
words = text.split()
word_count = Counter(words)
print("單詞統計:", word_count)# 獲取最常見的元素
print("最常見的3個字符:", char_count.most_common(3))

1.2 defaultdict類

from collections import defaultdict# 默認字典,自動創建默認值
d = defaultdict(list)
d['a'].append(1)
d['a'].append(2)
d['b'].append(3)
print("defaultdict:", dict(d))# 統計單詞首字母
words = ['apple', 'banana', 'apricot', 'blueberry']
letter_words = defaultdict(list)
for word in words:letter_words[word[0]].append(word)
print("按首字母分組:", dict(letter_words))

1.3 namedtuple類

from collections import namedtuple# 創建命名元組
Point = namedtuple('Point', ['x', 'y'])
p1 = Point(3, 4)
p2 = Point(6, 8)print(f"點1: ({p1.x}, {p1.y})")
print(f"點2: ({p2.x}, {p2.y})")# 創建學生記錄
Student = namedtuple('Student', ['name', 'age', 'grade'])
students = [Student('張三', 20, 85),Student('李四', 19, 92),Student('王五', 21, 78)
]for student in students:print(f"{student.name}: {student.age}歲,成績{student.grade}")

2. itertools模塊

2.1 無限迭代器

import itertools# 無限計數
counter = itertools.count(1, 2)  # 從1開始,步長為2
print("前5個偶數:")
for i, num in enumerate(counter):if i >= 5:breakprint(num, end=" ")
print()# 無限循環
cycle_items = itertools.cycle(['A', 'B', 'C'])
print("循環前10次:")
for i, item in enumerate(cycle_items):if i >= 10:breakprint(item, end=" ")
print()

2.2 組合迭代器

import itertools# 排列
items = ['a', 'b', 'c']
permutations = list(itertools.permutations(items, 2))
print("2個元素的排列:", permutations)# 組合
combinations = list(itertools.combinations(items, 2))
print("2個元素的組合:", combinations)# 笛卡爾積
colors = ['紅', '藍']
sizes = ['S', 'M', 'L']
products = list(itertools.product(colors, sizes))
print("顏色和尺寸的笛卡爾積:", products)

3. functools模塊

3.1 partial函數

from functools import partial# 創建偏函數
def greet(greeting, name):return f"{greeting}, {name}!"hello = partial(greet, "Hello")
goodbye = partial(greet, "Goodbye")print(hello("張三"))
print(goodbye("李四"))

3.2 reduce函數

from functools import reduce# 計算列表元素的和
numbers = [1, 2, 3, 4, 5]
total = reduce(lambda x, y: x + y, numbers)
print(f"總和: {total}")# 計算列表元素的最大值
max_num = reduce(lambda x, y: x if x > y else y, numbers)
print(f"最大值: {max_num}")# 階乘計算
def factorial(n):return reduce(lambda x, y: x * y, range(1, n + 1))print(f"5的階乘: {factorial(5)}")

4. json模塊

4.1 基本操作

import json# Python對象轉JSON字符串
data = {'name': '張三','age': 25,'city': '北京','skills': ['Python', 'Java', 'SQL'],'married': False,'salary': None
}json_string = json.dumps(data, ensure_ascii=False, indent=2)
print("JSON字符串:")
print(json_string)# JSON字符串轉Python對象
parsed_data = json.loads(json_string)
print("\n解析后的數據:")
print(f"姓名: {parsed_data['name']}")
print(f"技能: {', '.join(parsed_data['skills'])}")# 寫入JSON文件
with open('data.json', 'w', encoding='utf-8') as f:json.dump(data, f, ensure_ascii=False, indent=2)

5. csv模塊

5.1 讀寫CSV文件

import csv# 寫入CSV文件
students = [['姓名', '年齡', '成績', '城市'],['張三', 20, 85, '北京'],['李四', 19, 92, '上海'],['王五', 21, 78, '廣州']
]with open('students.csv', 'w', newline='', encoding='utf-8') as f:writer = csv.writer(f)writer.writerows(students)print("CSV文件寫入完成")# 讀取CSV文件
with open('students.csv', 'r', encoding='utf-8') as f:reader = csv.reader(f)for row in reader:print(row)

6. 練習項目

項目:數據分析工具

from collections import Counter, defaultdict
import json
import csvclass DataAnalyzer:def __init__(self):self.data = []def load_from_csv(self, filename):"""從CSV文件加載數據"""with open(filename, 'r', encoding='utf-8') as f:reader = csv.DictReader(f)self.data = list(reader)print(f"從{filename}加載了{len(self.data)}條數據")def analyze_numeric_field(self, field_name):"""分析數值字段"""values = [float(item[field_name]) for item in self.data if item[field_name].replace('.', '').isdigit()]if not values:return Noneanalysis = {'count': len(values),'sum': sum(values),'average': sum(values) / len(values),'min': min(values),'max': max(values)}return analysisdef analyze_categorical_field(self, field_name):"""分析分類字段"""values = [item[field_name] for item in self.data if item[field_name]]counter = Counter(values)analysis = {'unique_count': len(counter),'most_common': counter.most_common(5),'total_count': len(values)}return analysisdef group_by_field(self, group_field, value_field):"""按字段分組統計"""grouped_data = defaultdict(list)for item in self.data:if item[group_field] and item[value_field]:try:value = float(item[value_field])grouped_data[item[group_field]].append(value)except ValueError:continue# 計算每組的統計信息group_stats = {}for group, values in grouped_data.items():group_stats[group] = {'count': len(values),'average': sum(values) / len(values),'min': min(values),'max': max(values)}return group_statsdef main():"""主程序"""print("=== 數據分析工具 ===")analyzer = DataAnalyzer()# 創建示例數據sample_data = [{'姓名': '張三', '年齡': 25, '工資': 8000, '部門': '技術部', '城市': '北京'},{'姓名': '李四', '年齡': 30, '工資': 12000, '部門': '技術部', '城市': '上海'},{'姓名': '王五', '年齡': 28, '工資': 10000, '部門': '銷售部', '城市': '廣州'},{'姓名': '趙六', '年齡': 35, '工資': 15000, '部門': '管理部', '城市': '北京'}]# 保存示例數據到CSVwith open('sample_data.csv', 'w', newline='', encoding='utf-8') as f:fieldnames = ['姓名', '年齡', '工資', '部門', '城市']writer = csv.DictWriter(f, fieldnames=fieldnames)writer.writeheader()writer.writerows(sample_data)print("示例數據已保存到sample_data.csv")# 加載數據analyzer.load_from_csv('sample_data.csv')# 分析數值字段print("\n=== 年齡分析 ===")age_analysis = analyzer.analyze_numeric_field('年齡')if age_analysis:print(f"年齡統計: {age_analysis}")print("\n=== 工資分析 ===")salary_analysis = analyzer.analyze_numeric_field('工資')if salary_analysis:print(f"工資統計: {salary_analysis}")# 分析分類字段print("\n=== 部門分析 ===")dept_analysis = analyzer.analyze_categorical_field('部門')if dept_analysis:print(f"部門統計: {dept_analysis}")# 分組分析print("\n=== 按部門分組分析工資 ===")dept_salary = analyzer.group_by_field('部門', '工資')for dept, stats in dept_salary.items():print(f"{dept}: {stats}")if __name__ == "__main__":main()

7. 總結

本節課我們學習了:

  • collections模塊的高級數據結構
  • itertools模塊的迭代器工具
  • functools模塊的函數工具
  • json、csv等數據處理模塊
  • 編寫了數據分析工具

8. 下節課預告

下節課我們將學習:

  • 第三方庫的安裝和使用
  • 項目實戰練習
  • Python編程最佳實踐

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/94142.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/94142.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/94142.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

? Ranger 基礎命令與功能詳解

📌 1. Ranger簡介 Ranger(游俠)是一款 Linux 專用的 指令式文件管理器,其操作風格類似 Vim,通過輸入指令即可完成目錄跳轉、文件編輯、移動、復制等操作。 相比于 mc(Midnight Commander)&…

CUDA安裝教程(包括cuDNN的教程)一個博客帶你了解所有問題

前言 windows10 版本安裝 CUDA ,首先需要下載兩個安裝包 CUDA toolkit(toolkit就是指工具包)cuDNN 注:cuDNN 是用于配置深度學習使用 官方教程 CUDA:Installation Guide Windows :: CUDA Toolkit Documentation …

ArkTS 語言全方位解析:鴻蒙生態開發新選擇

在鴻蒙生態蓬勃發展的當下,一款高效、健壯的開發語言成為開發者的迫切需求。ArkTS 語言應運而生,作為鴻蒙生態的核心應用開發語言,它在 TypeScript(簡稱 TS)基礎上進行創新擴展,為開發者打造高性能、易維護…

JavaScript性能優化實戰:從瓶頸識別到極致體驗

文章目錄JavaScript性能優化實戰:從瓶頸識別到極致體驗1. 引言:為什么JavaScript性能至關重要1.1 性能對用戶體驗的影響1.2 JavaScript性能瓶頸的多樣性2. JavaScript內存管理優化2.1 JavaScript內存模型詳解2.2 垃圾回收機制與優化策略2.3 內存分析實戰…

批量歸一化:不將參數上傳到中心服務器,那服務器怎么進行聚合?

聯邦批量歸一化(FedBN) 是一種聯邦學習客戶端本地模型優化算法。它的核心思想是:在聯邦學習的客戶端本地訓練過程中,保留并獨立更新批量歸一化層(Batch Normalization, BN)的參數,而不將這些參數…

Qt中使用MySQL數據庫

一、MySQL 入門 核心概念 在 QT 中操作數據庫,主要使用兩個模塊: QSqlDatabase:代表一個數據庫連接。 QSqlQuery:用于執行 SQL 語句(如 SELECT, INSERT, UPDATE, DELETE)并處理結果。 環境準備 在編寫代碼之前,你需要確保系統已具備以下條件: 1. 安裝 MySQL 從 M…

Android - 統一資源標識符 Uri

一、概念URI(Uniform Resource Identifier)統一資源標識符,用于標識資源的字符串(如圖片、網頁、文件、應用等)。1.1 與 URL 的區別URL(統一資源定位符)是 URI(統一資源標識符&#…

開源 AR 眼鏡怎么選?OpenGlass ,OSSG,cheApR 分析推薦

開源項目橫評(看完你會知道自己屬于哪一類) 1)OpenGlass:最低成本跑通“能用的AI眼鏡” 賣點:用不到$25的通用元件,把任意普通眼鏡改造成“可黑客化”的智能眼鏡;能錄制、識別、翻譯、記人等。…

RAGFlow (一) 開發環境搭建

本文介紹如何在Windows上進行RAGFlow開發環境搭建 一. 環境準備 前提條件 CPU ≥ 4 核內存 ≥ 16 GB磁盤 ≥ 50 GBDocker ≥ 24.0.0 & Docker Compose ≥ v2.26.1 安裝Docker Desktop為wsl安裝Ubuntu 1.啟用 WSL2??(Windows Subsystem for Linux&#xff09…

k8sday13數據存儲(1.5/2)

目錄 二、高級核心存儲 1、PV 1.1配置文件 ①、訪問模式(accessModes) ②、回收策略(persistentVolumeReclaimPolicy) ③、存儲類別 ④、狀態(Status) 1.2創建測試 ①、準備NFS環境 ②、創建PV …

【力扣 Hot100】每日一題

D15 魯迅曾說,盡量每天都讓自己充實一點,你可以刷一個小時的短視頻,打一個小時的王者榮耀,但盡量再留一個小時出來讀一下書、教程、博客,讓自己的大腦保持活躍,而不是垃圾場。如果真的沒有事情做&#xff…

Sql server的行轉列

業務場景:有如下一張表,希望匯總成下面的查詢結果。 原始數據表 EmployeeTable:一個員工身兼多個崗位。 Employee Role Level 張三 工程師 3 張三 經理 5 李四 工程師 2 李四 主管…

某市-2025【網安·論道】決賽-misc1-翻轉-wp

題目給了個圖片以及一句提示 “斯蒂xx會幫助你” 直接就能想到 ste 開頭的那幾個工具,但是我比賽時候電腦什么ste開頭的工具都沒裝,只能回來做了。 └─$ exiftool x.jpeg ExifTool Version Number : 13.00 File Name : …

[系統架構設計師]大數據架構設計理論與實踐(十九)

[系統架構設計師]大數據架構設計理論與實踐(十九) 一.傳統數據處理系統的問題 1.傳統數據庫的數據過載問題 傳統應用的數據系統架構設計時,應用直接訪問數據庫系統。當用戶訪問量增加時,數據庫無 法支撐日益增長的用戶請求的負載&…

UniAD

1. 算法動機及開創性思路 1)UniAD算法簡介 算法全稱:Planning-oriented Autonomous Driving核心特點: 統一框架整合感知、預測、規劃模塊CVPR 2023最佳論文采用查詢(query)方式連接各模塊 名稱含義: Unified:統一多模塊…

ESP-NOW詳解(esp-idf)

esp-now目前主要支持單播和廣播,廣播地址為ff:ff:ff:ff:ff:ff,廣播可以向范圍內所有擁有esp-now接收的設備發送數據 注意事項,網絡模式是可以設置網絡mac地址的,在單播中,目標設備網絡模式選擇為ap時,mac地址會發生改…

`strlen` 字符串長度函數

1) 函數的概念與用途 strlen 是 C 語言標準庫中最基礎且使用最頻繁的字符串處理函數之一,它的名字來源于"string length"(字符串長度)。這個函數的功能非常明確:計算一個以空字符結尾的字符串的長度。 可以將 strlen 想…

TorchInductor - Introduction

PyTorch 2.x通過TorchDynamo通過Python Bytecode的動態變換實現了圖捕獲功能,需要搭配一個Compiler Backend完成圖編譯。 Pytorch嘗試集成了多個后端,并使用一個輕量級的autotuner來選擇最優的后端圖編譯結果。這個解決方案存在2個問題: 這…

Adobe Illustrator默認鍵盤快捷鍵

目錄 默認鍵盤快捷鍵 常用的快捷鍵 處理文檔 選擇工具 查看圖稿 處理所選對象 繪制 編輯形狀 處理實時上色組 處理對象 創建可變寬度點 處理文字 使用面板 動作面板 “畫筆”面板 “字符”和“段落”面板 “顏色”面板 “漸變”面板 “圖層”面板 “色板”…

「數據獲取」《中國能源統計年鑒》(1986-2023)(獲取方式看綁定的資源)

01、數據簡介一、年鑒基本定位與發展歷程《中國能源統計年鑒》作為一部權威性極強的能源領域資料典籍,始終以全面、精準反映中國能源建設推進、生產運行、消費態勢以及供需平衡狀況為核心使命。其編纂工作發軔于 1986 年,最初由國家統計局工業交通統計司…