Python從入門到精通五:Python數據容器

數據容器入門

為什么學習數據容器

思考一個問題:如果我想要在程序中,記錄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. 字符串有哪些特點:


?

?

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

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

相關文章

Kalman濾波、擴展Kalman濾波、無跡Kalman濾波和異步濾波的原理及其Matlab代碼

目錄 引言Kalman濾波代碼及其結果展示 擴展Kalman濾波代碼及其結果展示 無跡Kalman濾波無跡變換無跡Kalman濾波代碼及其結果展示 異步無跡Kalman濾波原理代碼及其結果展示 引言 本文給出了Kalman Filter&#xff08;卡爾曼濾波&#xff09;、Extended Kalman Filter&#xff0…

leetcode 98. 驗證二叉搜索樹

leetcode 98. 驗證二叉搜索樹 題目 給你一個二叉樹的根節點 root &#xff0c;判斷其是否是一個有效的二叉搜索樹。 有效 二叉搜索樹定義如下&#xff1a; 節點的左子樹只包含 小于 當前節點的數。 節點的右子樹只包含 大于 當前節點的數。 所有左子樹和右子樹自身必須也是…

vue3 引入 markdown編輯器

參考文檔 安裝依賴 pnpm install mavon-editor // "mavon-editor": "3.0.1",markdown 編輯器 <mavon-editor></mavon-editor>新增文本 <mavon-editor ref"editorRef" v-model"articleModel.text" codeStyle"…

Adams與Abaqus沖突問題

隨著工程仿真軟件的廣泛應用&#xff0c;Adams和Abaqus已成為眾多工程師的首選工具。然而&#xff0c;在使用過程中&#xff0c;一些用戶可能會遇到這兩個軟件之間的沖突問題&#xff0c;導致無法正常進行仿真分析。為了幫助大家解決這一難題&#xff0c;我們推出了一篇關于Ada…

Softmax回歸

一、Softmax回歸關鍵思想 1、回歸問題和分類問題的區別 Softmax回歸雖然叫“回歸”&#xff0c;但是它本質是一個分類問題。回歸是估計一個連續值&#xff0c;而分類是預測一個離散類別。 2、Softmax回歸模型 Softmax回歸跟線性回歸一樣將輸入特征與權重做線性疊加。與線性回歸…

Linux安裝Nginx并部署Vue項目

今天部署了一個Vue項目到阿里云的云服務器上&#xff0c;現記錄該過程。 1. 修改Vue項目配置 我們去項目中發送axios請求的文件里更改一下后端的接口路由&#xff1a; 2. 執行命令打包 npm run build ### 或者 yarn build 打包成功之后&#xff0c;我們會看到一個dist包&a…

[MySQL]SQL優化之索引的使用規則

&#x1f308;鍵盤敲爛&#xff0c;年薪30萬&#x1f308; 目錄 一、索引失效 &#x1f4d5;最左前綴法則 &#x1f4d5;范圍查詢> &#x1f4d5;索引列運算&#xff0c;索引失效 &#x1f4d5;前模糊匹配 &#x1f4d5;or連接的條件 &#x1f4d5;字符串類型不加 …

110. 平衡二叉樹(Java)

給定一個二叉樹&#xff0c;判斷它是否是高度平衡的二叉樹。 本題中&#xff0c;一棵高度平衡二叉樹定義為&#xff1a; 一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1 。 示例 1&#xff1a; 輸入&#xff1a;root [3,9,20,null,null,15,7] 輸出&#xff1a;t…

如何通過SPI控制Peregrine的數控衰減器

概要 Peregrine的數控衰減器PE4312是6位射頻數字步進衰減器(DSA,Digital Step Attenuator)工作頻率覆蓋1MHz~4GHz,插入損耗2dB左右,衰減步進0.5dB,最大衰減量為31.5dB,高達59dBm的IIP3提供了良好的動態性能,切換時間0.5微秒,供電電源2.3V~5.5V,邏輯控制兼容1.8V,20…

?如何使用https://www.krea.ai/來實現文生圖,圖生圖,

網址&#xff1a;https://www.krea.ai/apps/image/realtime Krea.ai 是一個強大的人工智能藝術生成器&#xff0c;可用于創建各種創意內容。它可以用來生成文本描述的圖像、將圖像轉換為其他圖像&#xff0c;甚至寫博客文章。 文本描述生成圖像 要使用 Krea.ai 生成文本描述…

設計模式——建造者模式(Java示例)

引言 生成器是一種創建型設計模式&#xff0c; 使你能夠分步驟創建復雜對象。 與其他創建型模式不同&#xff0c; 生成器不要求產品擁有通用接口。 這使得用相同的創建過程生成不同的產品成為可能。 復雜度&#xff1a; 中等 流行度&#xff1a; 流行 使用示例&#xff1a…

【conda】利用Conda創建虛擬環境,Pytorch各版本安裝教程(Ubuntu)

TOC conda 系列&#xff1a; 1. conda指令教程 2. 利用Conda創建虛擬環境&#xff0c;安裝Pytorch各版本教程(Ubuntu) 1. 利用Conda創建虛擬環境 nolonolo:~/sun/SplaTAM$ conda create -n splatam python3.10查看結果&#xff1a; (splatam) nolonolo:~/sun/SplaTAM$ cond…

Java 中的 Deque 接口及其用途

文章目錄 Deque 介紹Deque 使用雙端隊列普通隊列棧 總結 在 Java 中&#xff0c;Deque 接口是一個雙端隊列&#xff08;double-ended queue&#xff09;的數據結構&#xff0c;它支持在兩端插入和移除元素。Deque 是 “Double Ended Queue” 的縮寫&#xff0c;而且它可以同時充…

Linux系統編程(一):基本概念

參考引用 Unix和Linux操作系統有什么區別&#xff1f;一文帶你徹底搞懂posix Linux系統編程&#xff08;文章鏈接匯總&#xff09; 1. Unix 和 Linux 1.1 Unix Unix 操作系統誕生于 1969 年&#xff0c;貝爾實驗室發布了一個用 C 語言編寫的名為「Unix」的操作系統&#xff0…

【基于LSTM的電商評論情感分析:Flask與Sklearn的完美結合】

基于LSTM的電商評論情感分析&#xff1a;Flask與Sklearn的完美結合 引言數據集與爬取數據處理與可視化情感分析模型構建Flask應用搭建詞云展示創新點結論 引言 在當今數字化時代&#xff0c;電商平臺上涌現出大量的用戶評論數據。了解和分析這些評論對于企業改進產品、服務以及…

?expect命令運用于bash?

目錄 ?expect命令運用于bash? expect使用原理 expet使用場景 常用的expect命令選項 Expect腳本的結尾 常用的expect命令選參數 Expect執行方式 單一分支語法 多分支模式語法第一種 多分支模式語法第二種 在shell 中嵌套expect Shell Here Document&#xff08;內…

基于Java實驗室管理系統

基于Java實驗室管理系統 功能需求 1、實驗室設備管理&#xff1a;系統需要提供實驗室設備管理功能&#xff0c;包括設備的查詢、預訂、使用記錄、維護和報廢等。 2、實驗項目管理&#xff1a;系統需要提供實驗項目管理功能&#xff0c;包括項目的創建、審批、執行和驗收等&a…

以太坊:前世今生與未來

一、引言 以太坊&#xff0c;這個在區塊鏈領域大放異彩的名字&#xff0c;似乎已經成為了去中心化應用&#xff08;DApps&#xff09;的代名詞。從初期的萌芽到如今的繁榮發展&#xff0c;以太坊經歷了一段曲折而精彩的旅程。讓我們一起回顧一下以太坊的前世今生&#xff0c;以…

樹實驗代碼

哈夫曼樹 #include <stdio.h> #include <stdlib.h> #define MAXLEN 100typedef struct {int weight;int lchild, rchild, parent; } HTNode;typedef HTNode HT[MAXLEN]; int n;void CreatHFMT(HT T); void InitHFMT(HT T); void InputWeight(HT T); void SelectMi…

【算法專題】分治 - 快速排序

分治 - 快速排序 分治 - 快速排序1. 顏色分類2. 排序數組(快速排序)3. 數組中的第K個最大元素4. 庫存管理Ⅲ5. 排序數組(歸并排序)6. 交易逆序對的總數7. 計算右側小于當前元素的個數8. 翻轉對 分治 - 快速排序 1. 顏色分類 做題鏈接 -> Leetcode -75.顏色分類 題目&…