一文帶你搞懂Python中的數(shù)據(jù)容器
一、數(shù)據(jù)容器:list(列表)
列表內(nèi)的每一個(gè)數(shù)據(jù),稱之為元素
- 以 [] 作為標(biāo)識(shí)
- 列表內(nèi)每一個(gè)元素之間用, 逗號(hào)隔開
定義語法:
[元素1, 元素2, 元素3, ......]
例:
list = ['iii', 666, '你好']
1.1 list取出元素
列表中的每一個(gè)元素,都有其位置下標(biāo)索引,從前向后的方向,從0開始,依次遞增或者遞減
語法:列表[下標(biāo)],即可取出
1.2 列表的常用操作(方法)
1.2.1 列表的查詢功能(方法)
功能:查找指定元素在列表的下標(biāo),如果找不到,報(bào)錯(cuò)ValueError
語法:列表.index(元素)
1.2.2 列表的修改功能(方法)
修改特定位置(索引)的元素值:
語法:列表[下標(biāo)] = 值
可以使用如上語法,直接對(duì)指定下標(biāo)(正向、反向下標(biāo)均可)的值進(jìn)行:重新賦值(修改)
插入元素:
語法:列表.insert(下標(biāo), 元素)
,在指定的下標(biāo)位置,插入指定的元素
追加元素:
語法:列表.append(元素)
,將指定元素,追加到列表的尾部
追加元素方式2:
語法:列表.extend(其它數(shù)據(jù)容器)
,將其它數(shù)據(jù)容器的內(nèi)容取出,依次追加到列表尾部
刪除元素:
- 語法1:
del 列表[下標(biāo)]
- 語法2:
列表.pop(下標(biāo))
刪除某元素在列表中的第一個(gè)匹配項(xiàng):
語法:列表.remove(元素)
清空列表內(nèi)容:
語法:列表.clear()
統(tǒng)計(jì)某元素在列表內(nèi)的數(shù)量
語法:列表.count(元素)
1.2.3 列表的查詢功能(方法)
統(tǒng)計(jì)列表內(nèi),有多少元素
語法:len(列表)
可以得到一個(gè)int數(shù)字,表示列表內(nèi)的元素?cái)?shù)量
list = [21, 25, 21, 23, 22, 20] list.append(31) list.extend([29, 33, 30]) listone = list.pop() idx = list.index(31) print(idx)
使用方式 | 作用 |
---|---|
列表.append(元素) | 向列表中追加一個(gè)元素 |
列表.extend(容器) | 將數(shù)據(jù)容器的內(nèi)容依次取出,追加到列表尾部 |
列表.insert(下標(biāo), 元素) | 在指定下標(biāo)處,插入指定的元素 |
del 列表[下標(biāo)] | 刪除列表指定下標(biāo)元素 |
列表.pop(下標(biāo)) | 刪除列表指定下標(biāo)元素 |
列表.remove(元素) | 從前向后,刪除此元素第一個(gè)匹配項(xiàng) |
列表.clear() | 清空列表 |
列表.count(元素) | 統(tǒng)計(jì)此元素在列表中出現(xiàn)的次數(shù) |
列表.index(元素) | 查找指定元素在列表的下標(biāo) 找不到報(bào)錯(cuò)ValueError |
len(列表) | 統(tǒng)計(jì)容器內(nèi)有多少元素 |
1.3 列表的特點(diǎn)
- 可以容納多個(gè)元素(上限為2**63-1、9223372036854775807個(gè))
- 可以容納不同類型的元素(混裝)
- 數(shù)據(jù)是有序存儲(chǔ)的(有下標(biāo)序號(hào))
- 允許重復(fù)數(shù)據(jù)存在
- 可以修改(增加或刪除元素等)
1.4 列表的遍歷
1.4.1 列表的遍歷 - while循環(huán)
def while_list(): list = [11, 12, 13] index = 0 while index < len(list): el = list[index] print(f'元素:{el}') index += 1 while_list()
1.4.2 列表的遍歷 - for循環(huán)
def for_list(): list = [1, 2, 3, 4, 5] for v in list: print(f'元素:{v}') for_list()
練習(xí)案例:取出列表內(nèi)的偶數(shù)
list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] index = 0 new_list = [] while index < len(list): if list[index] % 2 == 0: new_list.append(list[index]) index += 1 for val in list: if val % 2 == 0: new_list.append(val) print(new_list)
二、數(shù)據(jù)容器:tuple(元組)
元組定義:定義元組使用小括號(hào),且使用逗號(hào)隔開各個(gè)數(shù)據(jù),數(shù)據(jù)可以是不同的數(shù)據(jù)類型。
元組一旦定義完成,就不可修改
元組由于不可修改的特性,所以其操作方法非常少。
元組也可以被遍歷,同列表一樣。
可以使用while循環(huán)和for循環(huán)遍歷它
方法 | 作用 |
---|---|
index() | 查找某個(gè)數(shù)據(jù),如果數(shù)據(jù)存在返回對(duì)應(yīng)的下標(biāo),否則報(bào)錯(cuò) |
count() | 統(tǒng)計(jì)某個(gè)數(shù)據(jù)在當(dāng)前元組出現(xiàn)的次數(shù) |
len(元組) | 統(tǒng)計(jì)元組內(nèi)的元素個(gè)數(shù) |
t1 = (1, 11) print(f'{t1}, type:{type(t1)}') num = t1.index(11)
元組的特點(diǎn):
- 可以容納多個(gè)數(shù)據(jù)
- 可以容納不同類型的數(shù)據(jù)(混裝)
- 數(shù)據(jù)是有序存儲(chǔ)的(下標(biāo)索引)
- 允許重復(fù)數(shù)據(jù)存在
- 不可以修改(增加或刪除元素等)
- 支持for循環(huán)
三、數(shù)據(jù)容器:str(字符串)
3.1 字符串的下標(biāo)(索引)
和其它容器如:列表、元組一樣,字符串也可以通過下標(biāo)進(jìn)行訪問
- 從前向后,下標(biāo)從0開始
- 從后向前,下標(biāo)從-1開始
同元組一樣,字符串是一個(gè):無法修改的數(shù)據(jù)容器。
所以:
- 修改指定下標(biāo)的字符 (如:字符串[0] = “a”)
- 移除特定下標(biāo)的字符 (如:del 字符串[0]、字符串.remove()、字符串.pop()等)
- 追加字符等 (如:字符串.append())
- 均無法完成。如果必須要做,只能得到一個(gè)新的字符串,舊的字符串是無法修改
3.2 字符串常用操作匯總
操作 | 說明 |
---|---|
字符串[下標(biāo)] | 根據(jù)下標(biāo)索引取出特定位置字符 |
字符串.index(字符串) | 查找給定字符的第一個(gè)匹配項(xiàng)的下標(biāo) |
字符串.replace(字符串1, 字符串2) | 將字符串內(nèi)的全部字符串1,替換為字符串2 不會(huì)修改原字符串,而是得到一個(gè)新的 |
字符串.split(字符串) | 按照給定字符串,對(duì)字符串進(jìn)行分隔 <br/>不會(huì)修改原字符串,而是得到一個(gè)新的列表 |
字符串.strip()<br/> 字符串.strip(字符串) | 移除首尾的空格和換行符或指定字符串 |
字符串.count(字符串) | 統(tǒng)計(jì)字符串內(nèi)某字符串的出現(xiàn)次數(shù) |
len(字符串) | 統(tǒng)計(jì)字符串的字符個(gè)數(shù) |
3.3 字符串的遍歷
同列表、元組一樣,字符串也支持while循環(huán)和for循環(huán)進(jìn)行遍歷
str = '小小叮當(dāng)' index = 0 while index < len(str): print(str[index]) index += 1 for v in str: print(v)
3.4 字符串的特點(diǎn)
作為數(shù)據(jù)容器,字符串有如下特點(diǎn):
- 只可以存儲(chǔ)字符串
- 長(zhǎng)度任意(取決于內(nèi)存大?。?/li>
- 支持下標(biāo)索引
- 允許重復(fù)字符串存在
- 不可以修改(增加或刪除元素等)
- 支持for循環(huán)
四、數(shù)據(jù)容器(序列)的切片
序列支持切片,即:列表、元組、字符串,均支持進(jìn)行切片操作
切片:從一個(gè)序列中,取出一個(gè)子序列
語法:序列[起始下標(biāo):結(jié)束下標(biāo):步長(zhǎng)]
表示從序列中,從指定位置開始,依次取出元素,到指定位置結(jié)束,得到一個(gè)新序列:
起始下標(biāo)表示從何處開始,可以留空,留空視作從頭開始
結(jié)束下標(biāo)(不含)表示何處結(jié)束,可以留空,留空視作截取到結(jié)尾
步長(zhǎng)表示,依次取元素的間隔
- 步長(zhǎng)1表示,一個(gè)個(gè)取元素
- 步長(zhǎng)2表示,每次跳過1個(gè)元素取
- 步長(zhǎng)N表示,每次跳過N-1個(gè)元素取
- 步長(zhǎng)為負(fù)數(shù)表示,反向?。ㄗ⒁?,起始下標(biāo)和結(jié)束下標(biāo)也要反向標(biāo)記)
my_list = [1, 2, 3, 4, 5] print(my_list[1:4:2]) my_tuple = (0, 1, 2, 3, 4, 5, 6) print(my_tuple[0:6:2]) str = 'ay,呀當(dāng)叮小來,nohtyP學(xué)' new_str = str[::-1] # print(new_str) list = new_str.split(',') print(list[1].replace('來', ''))
五、數(shù)據(jù)容器:set(集合)
集合的定義:
# 定義集合字面量
{元素,元素, ..., 元素}
# 定義集合變量
變量名稱 = {元素, 元素, ..., 元素}
# 定義空集合
變量名稱 = set()
操作 | 說明 |
---|---|
集合.add(元素) | 集合內(nèi)添加一個(gè)元素 |
集合.remove(元素) | 移除集合內(nèi)指定的元素 |
集合.pop() | 從集合中隨機(jī)取出一個(gè)元素 |
集合.clear() | 將集合清空 |
集合1.difference(集合2) | 得到一個(gè)新集合,內(nèi)含2個(gè)集合的差集 原有的2個(gè)集合內(nèi)容不變 |
集合1.difference_update(集合2) | 在集合1中,刪除集合2中存在的元素 集合1被修改,集合2不變 |
集合1.union(集合2) | 得到1個(gè)新集合,內(nèi)含2個(gè)集合的全部元素<br/> 原有的2個(gè)集合內(nèi)容不變 |
len(集合) | 得到一個(gè)整數(shù),記錄了集合的元素?cái)?shù)量 |
集合的特點(diǎn):
- 可以容納多個(gè)數(shù)據(jù)
- 可以容納不同類型的數(shù)據(jù)(混裝)
- 數(shù)據(jù)是無序存儲(chǔ)的(不支持下標(biāo)索引)
- 不允許重復(fù)數(shù)據(jù)存在
- 可以修改(增加或刪除元素等)
- 支持for循環(huán)
例:
my_list = ['111', '222', '333', '111', '333', 'itit', 'hehe', 'itit'] new_set = set() for val in my_list: new_set.add(val) print(new_set)
六、數(shù)據(jù)容器:dict(字典、映射)
字典的定義:同樣使用{},不過存儲(chǔ)的元素是一個(gè)個(gè)的:鍵值對(duì)
注意:
- 使用{}存儲(chǔ)原始,每一個(gè)元素是一個(gè)鍵值對(duì)
- 每一個(gè)鍵值對(duì)包含Key和Value(用冒號(hào)分隔)
- 鍵值對(duì)之間使用逗號(hào)分隔
- Key和Value可以是任意類型的數(shù)據(jù)(key不可為字典)
- Key不可重復(fù),重復(fù)會(huì)對(duì)原有數(shù)據(jù)覆蓋
提示:
- 鍵值對(duì)的Key和Value可以是任意類型(Key不可為字典)
- 字典內(nèi)Key不允許重復(fù),重復(fù)添加等同于覆蓋原有數(shù)據(jù)
- 字典不可用下標(biāo)索引,而是通過Key檢索Value
dic = { '王': { '部門': '科技部', '工資': 3000, '級(jí)別': 1 }, '周': { '部門': '市場(chǎng)部', '工資': 5000, '級(jí)別': 2 }, '林': { '部門': '市場(chǎng)部', '工資': 7000, '級(jí)別': 3 }, '張': { '部門': '科技部', '工資': 4000, '級(jí)別': 1 }, } for key in dic: if dic[key]['級(jí)別'] == 1: dic[key]['級(jí)別'] += 1 dic[key]['工資'] += 1000 print(dic)
到此這篇關(guān)于一文帶你搞懂Python中的數(shù)據(jù)容器的文章就介紹到這了,更多相關(guān)Python數(shù)據(jù)容器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python scipy實(shí)現(xiàn)差分進(jìn)化算法
差分進(jìn)化算法是廣義的遺傳算法的一種,核心思想是變異,這篇文章主要為大家介紹的則是著名的scipy庫中對(duì)差分進(jìn)化算法的實(shí)現(xiàn),希望對(duì)大家有所幫助2023-08-08python HTTPX庫實(shí)現(xiàn)同步異步請(qǐng)求用法示例
這篇文章主要為大家介紹了python HTTPX庫實(shí)現(xiàn)同步異步請(qǐng)求用法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01Python基于csv模塊實(shí)現(xiàn)讀取與寫入csv數(shù)據(jù)的方法
這篇文章主要介紹了Python基于csv模塊實(shí)現(xiàn)讀取與寫入csv數(shù)據(jù)的方法,結(jié)合實(shí)例形式分析了Python使用csv模塊針對(duì)csv文件的讀取與寫入相關(guān)操作技巧,需要的朋友可以參考下2018-01-01Python多線程、異步+多進(jìn)程爬蟲實(shí)現(xiàn)代碼
這篇文章主要介紹了Python多線程、異步+多進(jìn)程爬蟲實(shí)現(xiàn)代碼,需要的朋友可以參考下2016-02-02python3 使用openpyxl將mysql數(shù)據(jù)寫入xlsx的操作
這篇文章主要介紹了python3 使用openpyxl將mysql數(shù)據(jù)寫入xlsx的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05python神經(jīng)網(wǎng)絡(luò)特征金字塔FPN原理
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)特征金字塔FPN原理的解釋,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05python3調(diào)用windows dos命令的例子
今天小編就為大家分享一篇python3調(diào)用windows dos命令的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-08-08