Python學習之組合數據類型


一、概述

計算機不僅僅要對單個變量表示的數據進行處理,還需要對一組數據進行批量處理。如:

  給定一組單詞{python,data,function,list,loop},計算並輸出每個單詞的長度。

  給定一個學院學生的信息,統計男女生比例

數字類型、浮點數類型和復數類型;這些類型僅能表示一個數據,這種表示單一數據的類型稱為基本數據類型。組合數據類型能將多個類型同類型或不同類型的數據組織起來,通過單一的表示使數據操作更有序、更容易。根據數據之間的關系,組合數據類型可以分為三類:序列類型、集合類型和映射類型

  序列類型:是一個元素向量,元素之間存在先后關系,通過序號訪問,元素之間不排他。

  集合類型:是一個元素集合,元素之間無序,相同元素在集合中唯一存在。

  映射類型:是鍵—值數據項的組合,每個元素是一個鍵值對,表示為(key,value)

二、序列類型

1.簡介

  序列類型是一維元素向量,元素之間存在先后關系,通過序號訪問。由於元素之間存在順序關系,所以序列中可以存在數值相同但位置不同的元素。序列類型支持成員關系操作符in、長度計算函數len()、分片[]以及元素本身也可以是序列類型。序列類型有str(字符串)、tuple(元組)、list(列表)等。

  字符str可以看成是單一字符的有序組合,由於字符串類型十分常用且單一字符串只表達一個含義,也被看做是基本數據類型。元組tuple是包含0個或多個數據項的不可變序列類型,並且元組生成后

是固定的,其中的任何數據項不可替換或者刪除。列表list是一個可以修改的數據項序列類型。但無論是哪種,只要是序列類型,都可以使用相同的索引體系,即正向遞增序號和反向遞減序號。

2.序列類型的通用操作符和函數

      x in s          如果x是s的元素,返回True,否則返回False

      x not in s         如果x不是s的元素,返回True,否則返回False

      s+t           連接s和t

      s*n或n*s          將序列s復制n次

      s[i]           索引,返回序列的第i個元素

      s[i:j]            分片,返回包含序列s的第i到j個元素的子序列(不包含j,左閉右開)

      s[i:j:k]          步驟分片,返回包含序列s的第i到第j個元素以k為步數的子序列

      len(s)          序列s的元素個數(長度)

      min(s)           序列s中的最小元素

      max(s)           序列s中的最大元素

      s.index(x[,i[,j]])       序列s中從i開始到j位置中第一次出現元素x的位置

      s.count(x)         序列s中出現x的總次數

  (1)元組是序列類型中比較特殊的類型,因為它一旦創建就不能被修改。元組類型在表達固定數據項、函數多返回值、多變量同步賦值、循環遍歷等情況下十便利。

Python中元組采用逗號和圓括號來表示。

如下:

 

 

  生成元組只需要使用逗號將元素隔離開即可。例如上面的元組creature,也可以增加圓括號,但圓括號在不混淆語義的情況下不是必須的。一個元組可以作為另一個元組的元素,

並且可以采用多級索引來獲取信息。

元組的函數多返回值、多變量同步賦值、循環遍歷:

 

(2)列表是包含0個或者多個對象引用的有序序列,屬於序列類型。

  與元組不同,列表的長度和內容都可變,可以自由的對列表中的數據項進行增加、刪除或者替換。列表沒有長度限制,元素類型也可以不同。由於列表類型屬於序列類型,所以列表也支持成員關系操作符in、長度len()以及分片[]等操作。列表可以同時使用正向遞增序號何反向遞減序號,也可以采用標准的比較操作符(</<=/==/!=/>=/>)進行比較,列表比較其實是單個數據項的逐個比較。

  列表用中括號[]表示,也可以通過list()函數將元組或字符串轉化成列表。直接使用list()函會返回一個空列表。

如下:

 

 

列表類型特有的函數方法操作:

    ls[i]=x           替換列表ls第i項數據為x

    ls[i:j]=lt           用列表lt替換列表ls中第i到第j項數據(不包含第j項,下同)

    ls[i:j:k]=lt           用列表lt替換列表ls中第i到第j項以k為步長的數據

    del ls[i:j]            刪除列表ls第i到第j項數據。等價於ls[i:j]=[]

    del ls[i:j:k]          刪除列表ls第i到第j項以k為步長的數據

    ls+=lt或ls.extend(lt)        將列表lt元素增加到列表ls中

    ls*=n             更新列表ls,其元素重復n次

    ls.append(x)         在列表ls最后增加一個元素x

    ls.clear()          刪除ls中所有的元素

    ls.copy()           生成一個新列表,復制ls中的所有元素

    ls.insert(i,x)         在列表第i的位置新增插入元素x

    ls.pop(i)            將列表ls中第i項元素取出並刪除該元素

    ls.remove(x)          將列表ls中出現的第一個元素x刪除

    ls.reserve()         列表ls中的元素反轉

 

  當使用一個列表改變另一個列表時,Python不要求兩個列表長度一樣,但遵循“多增少減”的原則

如下:

 

三、集合類型

1.簡介

  集合類型與數學中的集合一致,即包含0個或多個數據項的無序組合。集合中的元素不可重復,元素類型只能是固定數據類型,例如整數、浮點數、字符串以及元組等。

列表、字典以及集合類型本身都是可變數據類型,不能作為集合元素出現,能夠進行哈希運算的類型都可以作為集合的元素。另外,Python提供了一種同名的具體數據類型——集合(set)。

  由於集合是無序組合,它沒有索引和位置的概念,也沒有分片的功能,但集合中的元素可以動態的增刪。集合用大括號{}表示,可以用復制語句生成一個集合。

如下:

 

  set(x)函數可以生成集合,輸入的參數可以是任何組合數據類型,返回的結果是一個無重復且排序任意的集合。

如下:

2.集合類型的操作函數

    S.add(x)        如果數據項x不在集合S中,將x增加到S中

    S.clear()        移除S中的所有數據

    S.copy()        返回集合S的一個副本

    S.pop()         隨機返回集合S中的一個元素,如果S為空,產生KeyError異常

    S.diacard(x)      如果x在集合S中,移除該元素,如果x不存在,不報錯

    S.remove(x)      如果x在集合S中,移除該元素,如果x不在,產生KeyError錯誤

    S.isdisjoint(T)      如果幾何S和集合T沒有相同的元素,返回True

    len(S)           返回集合S的個數

    x in S         如果x是集合S中的元素,返回True,否則返回False

    x not in S        如果x不在集合S中,返回True,否則返回False

 

四、映射類型

1.簡介

  映射類型是“鍵—值”的數據項的組合,每個元素是一個鍵值對,即元素是(key,value),元素之間是無序的,鍵值對(key,value)是一種二元關系。

鍵和值通過冒號連接,不同鍵值對通過逗號隔開。字典是集合類型的延續,所以各個元素並沒有順序之分。鍵和值可以是任意數據類型,包括程序自定義的類型。

2.字典類型的操作

(1)使用大括號可以創建字典,並制定初始值,通過括號可以增加新元素。

 

(2)可以直接使用大括號{}創建一個空字典,通過[]向其中增加元素。

 

 

(3)盡管集合類型也用大括號{}表示,但是生成一個空集合需要借助set()函數,直接使用{}是生成字典。

 

3.字典類型的函數和方法

    <d>.keys()            返回所有的鍵信息

    <d>.values()           返回所有的值信息

    <d>.items()             返回所有的鍵值對

    <d>.get(<key>,<default>)      鍵存在則返回相應值,否則返回默認值     

    <d>.pop(<key>,<default>)     鍵存在則返回相應值,同時刪除鍵值對,否則返回默認值

    <d>.popitem()           隨機從字典中取出一個鍵值對,以元組(key,value)形式返回

    <d>.clear()             刪除所有的鍵值對

    del<d>[<key>]          刪除字典中某一個鍵值對

    <key>in<d>            如果鍵在字典中則返回True,否則返回False

 

 

僅用於Python學習筆記


免責聲明!

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



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