定義

哈希

哈希是一種將任意大小的數據映射到固定大小值的過程
在Python中,可哈希(hashable)指的是一個對象能夠被哈希函數處理,即該對象有哈希值(通過__hash__方法),並且可以與其它對象比較(通過__eq__方法)。

  • 可哈希滿足條件
  • 在其生命週期內,哈希值從不改變(即它是不可變的)。
  • 可以與其他對象比較(實現了__eq__方法)
  • 其他
    不可變類型(如整數、浮點數、字符串、元組)通常是可哈希的。可變類型(如列表、字典、集合)是不可哈希的,因為它們的內容可以改變,而哈希值應該基於內容,所以內容改變會導致哈希值改變,這不符合哈希值的定義。

元組

元組是一個有序的,不可變的元素序列
元組的可哈希性使其可以作為字典鍵和集合元素

特性
  • 有序性:元素順序很重要
  • 可重複性:元素可以重複出現
  • 一旦創建,長度不可改變
創建
  • 使用()創建
  • python基礎教程-08-高級特性推導式_元組

  • 使用創建
  • python基礎教程-08-高級特性推導式_生成器_02

  • 單個元素的元組(必須加逗號)
  • python基礎教程-08-高級特性推導式_元組_03

  • 使用tuple()函數
  • python基礎教程-08-高級特性推導式_數據_04

集合

用於存儲無序,不重複的元素;可以進行交際,並集,差集等操作

定義
  • 集合(set)是一個無序的不重複的元素序列
  • 集合中的元素必須是哈希的(不可變類型)
  • 集合本身是不可哈希,所以集合不能作為集合的元素,但frozenset(不可變集合)可以
創建
  • 使用大括號創建
  • python基礎教程-08-高級特性推導式_生成器_05

  • 使用set()函數創建
  • python基礎教程-08-高級特性推導式_數據_06

常用操作
  • 添加元素
  • add():向集合中添加一個單個元素,要求這個元素必須可哈希
  • python基礎教程-08-高級特性推導式_生成器_07

  • update():用於將一個可迭代對象中的元素(必須可哈希)添加到集合中
  • python基礎教程-08-高級特性推導式_生成器_08

  • 刪除元素
  • remove():不存在會報錯
  • python基礎教程-08-高級特性推導式_生成器_09

  • discard():不存在不報錯
  • python基礎教程-08-高級特性推導式_生成器_10

  • pop():隨機刪除
  • python基礎教程-08-高級特性推導式_生成器_11

  • 集合運算
  • | :並集
  • python基礎教程-08-高級特性推導式_生成器_12

  • &:交集
  • python基礎教程-08-高級特性推導式_生成器_13

  • -:差集
  • python基礎教程-08-高級特性推導式_數據_14

  • ^:對稱差集(只在某一方中)
  • python基礎教程-08-高級特性推導式_元組_15

總結

元組的核心特點:

  • 有序性:元素保持插入順序
  • 不可變性:創建後不能修改
  • 可重複性:元素可以重複
  • 可哈希性:如果所有元素可哈希,則元組可哈希

集合的核心特點

  • 無序性:元素沒有固定順序
  • 互異性:元素不重複
  • 可變性:可以添加/刪除元素(除frozenset)
  • 可哈希要求:元素必須可哈希

歸納

  • 如果數據是記錄(有固定字段),使用元組
  • 如果數據是集合(需要去重或者快速查找),使用集合
  • 如果需要頻繁修改,使用列表
  • 如果需要鍵值對,使用字典

推導式

簡潔創建數據結構的語法

[expression for item in iterable if condition]:列表推導式,用於創建一個列表,返回一個列表

  • 基本推導式
  • python基礎教程-08-高級特性推導式_數據_16

  • 帶條件判斷的列表推導式
  • python基礎教程-08-高級特性推導式_元組_17

  • 多個循環的列表推導式
  • python基礎教程-08-高級特性推導式_元組_18

  • 嵌套列表推導式(矩陣轉置)
  • python基礎教程-08-高級特性推導式_數據_19

{key_expression: value_expression for item in iterable if condition}:字典推導式,用於創建字典,返回一個字典

  • 簡單列表推導式
  • python基礎教程-08-高級特性推導式_數據_20

  • 鍵值轉換
  • python基礎教程-08-高級特性推導式_元組_21

  • 帶條件判斷的字典推導式
  • 根據dict.items()特性,也可以寫成列表推導式
  • 合併兩個列表為一個字典

{expression for item in iterable if condition}:集合推導式,用於創建集合,返回一個集合

  • 創建唯一元素的集合
  • python基礎教程-08-高級特性推導式_元組_22

  • 從列表中提取唯一的元素
  • python基礎教程-08-高級特性推導式_生成器_23

  • 帶條件的集合推導式
  • python基礎教程-08-高級特性推導式_元組_24

表達式

能計算出一個值的代碼片段

(expression for item in iterable if condition):生成器表達式,用於創建生成器,返回一個生成器對象

  • 創建生成器

使用yield表達式(生成器函數)

python基礎教程-08-高級特性推導式_數據_25

value_if_true if condition else value_if_false:s三元表達式,條件表達式

  • 基本用法

lambda表達式(匿名函數)

  • 基本用法
  • python基礎教程-08-高級特性推導式_元組_26

  • 與三元表達式聯用
  • python基礎教程-08-高級特性推導式_元組_27