數據容器入門
為什么學習數據容器
思考一個問題:如果我想要在程序中,記錄5名學生的信息,如姓名。
如何做呢?
學習數據容器,就是為了批量存儲或批量使用多份數據
Python中的數據容器:
一種可以容納多份數據的數據類型,容納的每一份數據稱之為1個元素
每一個元素,可以是任意類型的數據,如字符串、數字、布爾等。
數據容器根據特點的不同,如:
- 是否支持重復元素
- 是否可以修改
- 是否有序,等
分為5類,分別是:
列表(list)、元組(tuple)、字符串(str)、集合(set)、字典(dict)
我們將一一學習它們
總結:
1、什么是數據容器?
一種可以存儲多個元素的Python數據類型
2. Python有哪些數據容器?
list(列表)、tuple(元組)、str(字符串)、set(集合)、dict(字典)
它們各有特點,但都滿足可容納多個元素的特性。
數據容器:list(列表)
為什么需要列表
思考:有一個人的姓名(TOM)怎么在程序中存儲?
答:字符串變量
思考:如果一個班級100位學生,每個人的姓名都要存儲,應該如何書寫程序?聲明100個變量嗎?
答:No,我們使用列表就可以了, 列表一次可以存儲多個數據
列表(list)類型,是數據容器的一類,我們來詳細學習它。
列表的定義
基本語法:
列表內的每一個數據,稱之為元素
- 以 [] 作為標識
- 列表內每一個元素之間用, 逗號隔開
列表的定義方式:
案例演示:使用[]的方式定義列表
總結:
1. 列表的定義語法
[元素1, 元素2, 元素3, ......]
2. 什么是元素?
數據容器內的每一份數據,都稱之為元素
3. 元素的類型有限制嗎?
元素的數據類型沒有任何限制,甚至元素也可以是列表,這樣就定義了嵌套列表
列表的下標索引
如何從列表中取出特定位置的數據呢?
我們可以使用:下標索引
如圖,列表中的每一個元素,都有其位置下標索引,從前向后的方向,從0開始,依次遞增
我們只需要按照下標索引,即可取得對應位置的元素。
列表的下標(索引) - 反向
或者,可以反向索引,也就是從后向前:從-1開始,依次遞減(-1、-2、-3......)
如圖,從后向前,下標索引為:-1、-2、-3,依次遞減。
嵌套列表的下標(索引)
如果列表是嵌套的列表,同樣支持下標索引
如圖,下標就有2個層級了。
總結:
1. 列表的下標索引是什么?
列表的每一個元素,都有編號稱之為下標索引
從前向后的方向,編號從0開始遞增
從后向前的方向,編號從-1開始遞減
2. 如何通過下標索引取出對應位置的元素呢?
列表[下標],即可取出
3. 下標索引的注意事項:
要注意下標索引的取值范圍,超出范圍無法取出元素,并且會報錯
列表的常用操作
列表的常用操作(方法)
列表除了可以:
- 定義
- 使用下標索引獲取值
以外,列表也提供了一系列功能:
- 插入元素
- 刪除元素
- 清空列表
- 修改元素
- 統計元素個數
等等功能,這些功能我們都稱之為:列表的方法
列表的查詢功能(方法)
回憶:函數是一個封裝的代碼單元,可以提供特定功能。
在Python中,如果將函數定義為class(類)的成員,那么函數會稱之為:方法
方法和函數功能一樣, 有傳入參數,有返回值,只是方法的使用格式不同:
函數的使用:
方法的使用:
關于類和方法的定義,在面向對象章節我們學習,目前我們知道如何使用方法即可。
查找某元素的下標
? ? ?功能:查找指定元素在列表的下標,如果找不到,報錯ValueError
? ? ?語法:列表.index(元素)
? ? ?index就是列表對象(變量)內置的方法(函數)
列表的修改功能(方法)
修改特定位置(索引)的元素值:
? ? ?語法:列表[下標] = 值
? ? ?可以使用如上語法,直接對指定下標(正向、反向下標均可)的值進行:重新賦值(修改)
?
插入元素:
? ? ?語法:列表.insert(下標, 元素),在指定的下標位置,插入指定的元素
追加元素:
? ? ?語法:列表.append(元素),將指定元素,追加到列表的尾部
追加元素方式2:
? ? ?語法:列表.extend(其它數據容器),將其它數據容器的內容取出,依次追加到列表尾部
刪除元素:
? ? ?語法1: del 列表[下標]
? ? ?語法2:列表.pop(下標)
刪除某元素在列表中的第一個匹配項
? ? ?語法:列表.remove(元素)
清空列表內容,語法:列表.clear()
統計某元素在列表內的數量
? ? ?語法:列表.count(元素)
列表的查詢功能(方法)
統計列表內,有多少元素
? ? ?語法:len(列表)
? ? ?可以得到一個int數字,表示列表內的元素數量
列表的方法 - 總覽
列表的方法 - 說明
功能方法非常多,同學們不需要硬記下來。
學習編程,不僅僅是Python語言本身,以后根據方向,會學習更多的框架技術。
除了經常用的,大多數是記憶不下來的。
我們要做的是,有一個模糊印象,知曉有這樣的用法即可。
需要的時候,隨時查閱資料即可。
列表的特點
經過上述對列表的學習,可以總結出列表有如下特點:
- 可以容納多個元素(上限為2**63-1、9223372036854775807個)
- 可以容納不同類型的元素(混裝)
- 數據是有序存儲的(有下標序號)
- 允許重復數據存在
- 可以修改(增加或刪除元素等)
?
總結:
1. 列表的常見方法有:
2. 列表有哪些特點?
list(列表)的遍歷
目標:
- 1. 掌握使用while循環,遍歷列表的元素
- 2. 掌握使用for循環,遍歷列表的元素
列表的遍歷 - while循環
既然數據容器可以存儲多個元素,那么,就會有需求從容器內依次取出元素進行操作。
將容器內的元素依次取出進行處理的行為,稱之為:遍歷、迭代。
如何遍歷列表的元素呢?
可以使用前面學過的while循環
如何在循環中取出列表的元素呢?
使用列表[下標]的方式取出
循環條件如何控制?
定義一個變量表示下標,從0開始
循環條件為 下標值 < 列表的元素數量
列表的遍歷 - for循環
除了while循環外,Python中還有另外一種循環形式:for循環。
對比while,for循環更加適合對列表等數據容器進行遍歷。
語法:
每一次循環將列表中的元素取出,賦值到變量i,供操作
表示,從容器內,依次取出元素并賦值到臨時變量上。
在每一次的循環中,我們可以對臨時變量(元素)進行處理。
while循環和for循環的對比
while循環和for循環,都是循環語句,但細節不同:
在循環控制上:
- while循環可以自定循環條件,并自行控制
- for循環不可以自定循環條件,只可以一個個從容器內取出數據
在無限循環上:
- while循環可以通過條件控制做到無限循環
- for循環理論上不可以,因為被遍歷的容器容量不是無限的
在使用場景上:
- while循環適用于任何想要循環的場景
- for循環適用于,遍歷數據容器的場景或簡單的固定次數循環場景
總結:
1. 什么是遍歷?
將容器內的元素依次取出,并處理,稱之為遍歷操作
2. 如何遍歷列表的元素?
可以使用while或for循環
3. for循環的語法:
4. for循環和while對比
- for循環更簡單,while更靈活
- for用于從容器內依次取出元素并處理,while用以任何需要循環的場景
?
數據容器:tuple(元組)
元組的定義
為什么需要元組
思考:列表是可以修改的。
如果想要傳遞的信息,不被篡改,列表就不合適了。
元組同列表一樣,都是可以封裝多個、不同類型的元素在內。
但最大的不同點在于:
元組一旦定義完成,就不可修改
所以,當我們需要在程序內封裝數據,又不希望封裝的數據被篡改,那么元組就非常合適了
定義元組
元組定義:定義元組使用小括號,且使用逗號隔開各個數據,數據可以是不同的數據類型。
注意:元組只有一個數據,這個數據后面要添加逗號
元組也支持嵌套:
元組的相關操作
元組的相關操作 - 注意事項
不可以修改元組的內容,否則會直接報錯
可以修改元組內的list的內容(修改元素、增加、刪除、反轉等)
不可以替換list為其它list或其它類型
元組的遍歷
同列表一樣,元組也可以被遍歷。
可以使用while循環和for循環遍歷它
元組的特點
經過上述對元組的學習,可以總結出列表有如下特點:
- 可以容納多個數據
- 可以容納不同類型的數據(混裝)
- 數據是有序存儲的(下標索引)
- 允許重復數據存在
- 不可以修改(增加或刪除元素等)
- 支持for循環
多數特性和list一致,不同點在于不可修改的特性。
總結:
1. 元組的定義方式:
(元素, 元素, 元素, ......)
2. 元組的操作方法:
3. 元組的注意事項:
不可修改內容(可以修改內部list的內部元素)
4. 元組的特點:
- 和list基本相同(有序、任意數量元素、允許重復元素),唯一不同在于不可修改。
- 支持for循環
?
數據容器:str(字符串)
盡管字符串看起來并不像:列表、元組那樣,一看就是存放了許多數據的容器。
但不可否認的是,字符串同樣也是數據容器的一員。
字符串是字符的容器,一個字符串可以存放任意數量的字符。
如,字符串:"itheima"
字符串的下標(索引)
和其它容器如:列表、元組一樣,字符串也可以通過下標進行訪問
- 從前向后,下標從0開始
- 從后向前,下標從-1開始
同元組一樣,字符串是一個:無法修改的數據容器。
所以:
- 修改指定下標的字符?? ?(如:字符串[0] = “a”)
- 移除特定下標的字符?? ?(如:del 字符串[0]、字符串.remove()、字符串.pop()等)
- 追加字符等?? ??? ?(如:字符串.append())
均無法完成。如果必須要做,只能得到一個新的字符串,舊的字符串是無法修改
字符串的常用操作
查找特定字符串的下標索引值
? ? ?語法:字符串.index(字符串)
字符串的替換
? ? ?語法:字符串.replace(字符串1,字符串2)
? ? ?功能:將字符串內的全部:字符串1,替換為字符串2
? ? ?注意:不是修改字符串本身,而是得到了一個新字符串哦
? ? ?可以看到,字符串name本身并沒有發生變化
? ? ?而是得到了一個新字符串對象
字符串的分割
? ? ?語法:字符串.split(分隔符字符串)
? ? ?功能:按照指定的分隔符字符串,將字符串劃分為多個字符串,并存入列表對象中
? ? ?注意:字符串本身不變,而是得到了一個列表對象
? ? ?可以看到,字符串按照給定的 <空格>進行了分割,變成多個子字符串,并存入一個列表對象中。
字符串的規整操作(去前后空格)
? ? ?語法:字符串.strip()
字符串的規整操作(去前后指定字符串)
? ? ?語法:字符串.strip(字符串)
注意,傳入的是“12” 其實就是:”1”和”2”都會移除,是按照單個字符。
統計字符串中某字符串的出現次數
? ? ?語法:字符串.count(字符串)
統計字符串的長度
? ? ?語法:len(字符串)
可以看出:
數字(1、2、3...)
字母(abcd、ABCD等)
符號(空格、!、@、#、$等)
中文
均算作1個字符
所以上述代碼,結果20
字符串常用操作匯總

字符串的遍歷
同列表、元組一樣,字符串也支持while循環和for循環進行遍歷
字符串的特點
作為數據容器,字符串有如下特點:
- 只可以存儲字符串
- 長度任意(取決于內存大小)
- 支持下標索引
- 允許重復字符串存在
- 不可以修改(增加或刪除元素等)
- 支持for循環
基本和列表、元組相同
不同與列表和元組的在于:字符串容器可以容納的類型是單一的,只能是字符串類型。
不同于列表,相同于元組的在于:字符串不可修改
總結:
1. 字符串為什么被稱之為數據容器呢?
字符串可以看做是字符的容器,支持下標索引等特性?
2. 字符串有哪些常用操作方法?
3. 字符串有哪些特點:
?
?