Python3常用數據結構

Python3中有三種組合數據類型,分別為:

  • 序列類型:字符串(str)、元組(tuple)、列表(list)
  • 集合類型:集合(set)
  • 映射類型:字典(map)

序列類型

Python序列類似于其他語言中的數組。支持雙向索引。第一個元素為0,最后一個元素為-1
在這里插入圖片描述

列表

內置可變序列,所有元素放在一對中括號中,并用逗號分隔。當列表元素增加或者刪除時,列表對象自動進行擴展或者收縮內存,保證元素之間沒有縫隙。一個列表中的元素可以各不相同

創建和刪除

使用=直接將一個列表賦值給變量即可創建列表對象。也可以使用list()函數將元組、range對象、字符串和其他類型的可迭代對象轉化為列表
當列表不再使用時可以用del命令刪除整個列表。如果列表對象所指向的值不再有其他對象指向,Python將同時刪除該值。

元素的增加

  • 使用+運算符將元素添加到列表中(嚴格意義上來講,這并不是真的為列表添加元素,而是創建一個新列表并將原列表中的元素和新元素依次復制到新列表的內存空間,因此效率較慢
  • 使用append()方法,原地修改列表,效率較高
  • 直接修改序列變量將會改變所指向的內存地址,而不是改變其所指向內存中的值。
  • 原地操作(通過下標修改、通過序列本身提供的方法)將不會改變所指向的內存地址
    在這里插入圖片描述
  • extend()方法可以將另一個迭代對象的所有元素添加至該列表對象尾部。屬于原地操作
  • insert()方法可以將元素添加至列表的指定位置。需要移動后面所有的元素,效率較低。
  • 使用乘法擴展列表對象
    在這里插入圖片描述
    當被擴展列表中的元素是引用的時候,擴展后的列表中的元素是相等的引用,如果對其中某一個引用所指向的地址空間進行修改,指向同一片區域的引用對應的值也會修改,根本原因在于乘法操作所進行的是淺復制,后面有對淺復制的介紹
    在這里插入圖片描述

元素的刪除

  • 使用del命令刪除列表中指定位置上的元素 ,原地操作
  • 使用列表的.pop()方法刪除并返回元素,默認刪除最后一個位置的元素
  • remove()方法刪除首次出現的指定元素,如果不存在拋出異常
    在這里插入圖片描述
    解決方法,可以使用x[:]深復制,詳見我之前的博客:Python a和a[:]的區別
    或者使用del從后往前進行刪除
    在這里插入圖片描述

元素的訪問和計數

  • 使用下標訪問,如果超出范圍則拋出異常
  • 使用index()方法獲取指定元素首次出現的下標。若不存在指定元素拋出異常
  • 使用count()方法統計指定元素在列表對象中出現的次數

切片操作

適用于列表、元組、字符串、range對象
語法:list[begin:end:step]返回一個新列表
在這里插入圖片描述

切片操作不會因為下標越界而拋出異常,而是簡單地在列表尾部截斷或者返回一個空列表
通過切片操作可以修改和刪除列表中的部分元素,甚至可以通過切片操作為列表對象增加元素

在這里插入圖片描述切片操作是原位操作,不會修改所指向的地址空間

在這里插入圖片描述
切片操作是一種淺復制
淺復制:把子列表的引用復制到新列表中,這樣的話修改任何一個都會影響另外一個
在這里插入圖片描述
當我們對某個元素進行修改的時候其實修改的是他的引用,如果我們修改的是引用所指向的空間,那么所有指向該空間的值都會發生改變

排序

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
這里的reversed對象好像只能訪問一次

常用方法

在這里插入圖片描述

常用內置函數

  • len(列表)返回列表中元素的個數
  • max() min()返回最大元素或者最小元素
  • sum()對列表元素進行求和,同樣適用于元組、range
    在這里插入圖片描述
  • zip()返回可迭代的zip對象
    在這里插入圖片描述
  • enumerate()枚舉列表元素,返回枚舉對象,其中每個元素為包含下標和值的元組。該函數對元組、字符串同樣有效

列表推導式

在列表推導式中使用多個循環實現多序列元素的任意組合,并且可以結合條件語句過濾特定元素
在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

元組

元組和列表類似,但屬于不可變序列
和列表的區別:

  • 元組中的數據一旦定義就不允許更改,也沒有對應的修改的方法
  • 從效果上看,tuple()凍結列表,而list()融化元組
    優點:
  • 速度比列表快
  • 不需要擔心被修改,更安全
  • 元組可以當作字典鍵(特別是包含字符串、樹枝和其他元組這樣不可變數據的元組)。列表永遠不能當作字典鍵使用,因為列表是可變的。

創建與刪除

  • 使用=將一個元組賦值給變量,需要注意的是一個元素的時候必須在元素后面加上逗號,否則將會當作里面的元素
  • 使用tuple()函數將其他序列轉換為元組
  • 使用del刪除元組對象,不過不能刪除元組中的元素

序列解包

在這里插入圖片描述

集合

集合是無序可變序列,使用一對大括號界定,元素不可重復,用一個集合中每個元素都是唯一的。

集合中只能包含數字、字符串、運足等不可變類型(可哈希類型)的數據,而不能包含列表、字典、集合等可變類型的數據

創建和刪除

  • 等號賦值
  • set()函數進行轉換,而且會自動去重
  • 使用del刪除整個集合
  • 使用pop()彈出并刪除其中一個元素,remove()方法直接刪除指定元素,clear()方法清空集合

集合操作

在這里插入圖片描述
在這里插入圖片描述在這里插入圖片描述

字典

字典是無需可變序列,是實現鍵值對映射的數據結構
字典是一個鍵值對的集合,該集合以鍵為索引,一個鍵對應一個值信息。字典中的鍵可以為任意不可變元素,如整數、實數、復數、字符串、元組等。
定義字典時,每個元素的鍵和值用冒號分隔,元素之間用逗號分隔,所有的元素放在一對大括號中
globals()返回包含當前作用域內所有全局變量和值的字典
locals()返回包含當前作用域內所有局部變量和值的字典

創建和刪除

  • 等號賦值

在這里插入圖片描述

  • 使用dict()利用已有數據創建字典
    在這里插入圖片描述在這里插入圖片描述

元素的讀取

  • 以鍵作為下標可以讀取字典元素,若鍵不存在則拋出異常
  • get()方法獲取指定鍵對應的值,并且在鍵不存在的時候返回指定值
    在這里插入圖片描述
  • 使用items()方法可以返回字典的鍵、值對列表
  • 使用key()方法返回鍵列表
  • 使用values()方法返回字典的值列表
    在這里插入圖片描述

元素的添加和修改

  • 以指定鍵為下標為字典賦值時,若鍵存在則修改該鍵的值,若不存在則添加一個鍵值對
  • 使用update()方法將另一個字典的鍵值對添加到當前字典對象
    在這里插入圖片描述
  • 使用del刪除字典中指定鍵的元素
  • 使用pop()方法刪除并返回指定鍵的元素
  • 使用clear()方法刪除字典中的所有元素
  • 使用popitem()方法刪除并返回字典中第一個元素

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

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

相關文章

Linux C++ 回射服務器

http://blog.csdn.net/qq_25425023/article/details/53914820回射服務器就是服務端將客戶端的數據發送回去。我實現的回射服務器返回增加了時間。服務端代碼&#xff0c;可以很容易看懂&#xff1a;[cpp] view plaincopy#include <sys/socket.h> #include <stdio.h&g…

TCP第四次揮手為什么要等待2MSL

當客戶端進入TIME-WAIT狀態的時候(也就是第四次揮手的時候)&#xff0c;必須經過時間計數器設置的時間2MSL(最長報文段壽命)后&#xff0c;才能進入關閉狀態&#xff0c;這時為什么呢&#xff1f;&#xff1f;&#xff1f; 這最主要是因為兩個理由&#xff1a; 1、為了保證客戶…

計算機網絡【一】概述+OSI參考模型

網絡概述 局域網:覆蓋范圍小(100m以內)&#xff0c;自己花錢買設備&#xff0c;帶寬固定(10M,100M,1000M)&#xff0c;自己維護&#xff08;接入層交換機直接連接電腦、匯聚層交換機直接連接接入層交換機&#xff09; 廣域網:距離遠&#xff0c;花錢買服務&#xff0c;租帶寬&…

單鏈表逆序的多種方式

https://www.cnblogs.com/eniac12/p/4860642.htmltemplate<class T> void List<T>::Inverse() {if(first NULL) return;LinkNode<T> *p, *prev, *latter; p first->link;   // 當前結點prev NULL;   // 前一結點l…

Linux系統【四】進程間通信-管道

進程間通信&#xff08;IPC Interprocess Communication&#xff09; 進程和進程之間的通信只能通過內核&#xff0c;在內核中提供一塊緩沖區進行通信。內核提供的這種機制叫做IPC 在進程間完成數據傳輸需要借助操作系統提供的特殊方法&#xff0c;如&#xff1a;文件&#xf…

單鏈表各種操作詳解

#include "stdio.h" #include "stdlib.h"#define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0#define MAXSIZE 20 /* 存儲空間初始分配量 */typedef int Status;/* Status是函數的類型,其值是函數結果狀態代碼&#xff0c;如OK等 */ typedef int…

Linux系統【五】進程間通信-共享內存mmap

mmap函數 #include <sys/mman.h> void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset);參數&#xff1a; void *addr建立映射區的首地址&#xff0c;由Linux內核指定&#xff0c;所以我們直接傳遞NULL。也就是說雖然這是一個參宿但是并不…

socket編程 -- epoll模型服務端/客戶端通信的實現

https://blog.csdn.net/y396397735/article/details/50680359 本例實現如下功能&#xff1a; 支持多客戶端與一個服務端進行通信&#xff0c;客戶端給服務端發送字符串數據&#xff0c;服務端將字符串中小寫轉為大寫后發送回客戶端&#xff0c;客戶端打印輸出經轉換后的字符串。…

Python3 面向對象程序設計

類的定義 Python使用class關鍵字來定義類 class Car:def infor(self):print("This is a car") car Car() car.infor()內置方法isinstance()來測試一個對象是否為某個類的實例 self參數 類的 所有實例方法都有一個默認的self參數&#xff0c;并且必須是方法的第一…

計算機網絡【二】物理層基礎知識

計算機網絡的性能 速率&#xff1a;連接在計算機網絡上的主機在數字信道上傳送數據位數的速率&#xff0c;也成為data rate 或bit rate&#xff0c;單位是b/s,kb/s,Mb/s,Gb/s。 我們平時所講的寬帶的速度是以字為單位的&#xff0c;但是實際中應用一般顯示的是字節 &#xff0…

Linux網絡編程——tcp并發服務器(多進程)

https://blog.csdn.net/lianghe_work/article/details/46503895一、tcp并發服務器概述一個好的服務器,一般都是并發服務器&#xff08;同一時刻可以響應多個客戶端的請求&#xff09;。并發服務器設計技術一般有&#xff1a;多進程服務器、多線程服務器、I/O復用服務器等。二、…

求序列第K大算法總結

參考博客&#xff1a;傳送門 在上面的博客中介紹了求序列第K大的幾種算法&#xff0c;感覺收益良多&#xff0c;其中最精巧的還是利用快速排序的思想O(n)查詢的算法。仔細學習以后我將其中的幾個實現了一下。 解法 1&#xff1a; 將亂序數組從大到小進行排序然后取出前K大&a…

Linux網絡編程——tcp并發服務器(多線程)

https://blog.csdn.net/lianghe_work/article/details/46504243tcp多線程并發服務器多線程服務器是對多進程服務器的改進&#xff0c;由于多進程服務器在創建進程時要消耗較大的系統資源&#xff0c;所以用線程來取代進程&#xff0c;這樣服務處理程序可以較快的創建。據統計&a…

計算機網絡【三】物理層數據通信

物理層傳輸媒介 導向傳輸媒體&#xff0c;比如光纖和銅線 雙絞線&#xff08;屏蔽雙絞線STP 五屏蔽雙絞線UTP&#xff09;電線扭曲在一起可以降低互相之間的電磁干擾 同軸電纜 (50歐姆的基帶同軸電纜&#xff0c;75歐姆的寬帶同軸電纜) 10M和100M網絡只使用了四根線&#xf…

02_算法分析

02_算法分析 0.1 算法的時間復雜度分析0.1.1 函數漸近增長概念&#xff1a;輸入規模n>2時&#xff0c;算法A1的漸近增長小于算法B1 的漸近增長隨著輸入規模的增大&#xff0c;算法的常數操作可以忽略不計測試二&#xff1a;隨著輸入規模的增大&#xff0c;與最高次項相乘的常…

Linux網絡編程——I/O復用之select詳解

https://blog.csdn.net/lianghe_work/article/details/46506143一、I/O復用概述I/O復用概念&#xff1a;解決進程或線程阻塞到某個 I/O 系統調用而出現的技術&#xff0c;使進程不阻塞于某個特定的 I/O 系統調I/O復用使用的場合&#xff1a;1.當客戶處理多個描述符&#xff08;…

Linux多進程拷貝文件

學習了mmap以后&#xff0c;實現一個簡單的小程序&#xff0c;進行多個進程對一個文件進行拷貝。 Linux mmap共享內存學習可以參考我的另一篇博客&#xff1a;傳送門 實現思想 我們可以將原來的文件利用mmap分成多個段分別進行傳輸。 實現代碼 #include<stdio.h> #…

斐波那契查找(Fibonacci Search)和折半查找

兩個查找算法都是針對有序數組進行查找&#xff0c;不同點在于分界點的取值不同。 算法介紹 折半查找很簡單&#xff0c;每次與當前區間的中點進行比較&#xff0c;然后決定查找前一部分還是后一部分。 Fibonacci查找利用了Fibonacci序列每一項等于前兩項和的特點進行劃分&a…

Linux網絡編程——tcp并發服務器(I/O復用之select)

https://blog.csdn.net/lianghe_work/article/details/46519633與多線程、多進程相比&#xff0c;I/O復用最大的優勢是系統開銷小&#xff0c;系統不需要建立新的進程或者線程&#xff0c;也不必維護這些線程和進程。代碼示例&#xff1a;#include <stdio.h> #include &l…