Python中比較特殊的幾種數據類型list、tuple、dict、set

来源:https://www.cnblogs.com/xxpythonxx/archive/2020/01/19/12215519.html
-Advertisement-
Play Games

list list(列表)是Python內置的一種數據類型,它是一種有序、可變的集合,可以隨時添加和刪除其中的元素。 變數classmates就是一個list。關於list的操作如下: 方法 len():獲取list元素的個數 通過索引訪問 append:向list末尾追加元素 insert:把元素 ...


list

list(列表)是Python內置的一種數據類型,它是一種有序、可變的集合,可以隨時添加和刪除其中的元素。

>>> classmates = ['Li', 'Tom', 'Alice']
>>> classmates
['Li', 'Tom', 'Alice']

變數classmates就是一個list。關於list的操作如下:

方法

len():獲取list元素的個數

>>> len(classmates)
 3

通過索引訪問

>>> classmates[0]
'Li'
>>> classmates[-1]
'Alice'
>>> classmates[3]
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    classmates[3]
IndexError: list index out of range

append:向list末尾追加元素

>>> classmates.append('Adam')
>>> classmates
['Li', 'Tom', 'Alice', 'Adam']

insert:把元素插入到指定的索引

>>> classmates.insert(1,'Jack')
>>> classmates
['Li', 'Jack', 'Tom', 'Alice', 'Adam']

pop():刪除末尾的元素

>>> classmates.pop()
'Adam

pop(i):刪除指定索引的元素

>>> classmates.pop(1)
'Jack'
>>> classmates
['Li', 'Tom', 'Alice']

tuple

tuple是一種有序、不變的集合,也叫元組,一旦初始化就不能修改。與list相比,就沒有append()、insert()這樣的方法。

為什麼有了list還要tuple?

因為tuple是不變的,所以代碼更安全,所以如果能用tuple代替list就儘量用tuple吧。

Notes

不變指的是tuple的每個元素,指向永遠不變,指向一個list,就不能改成指向其他對象,但指向的list本身是可以改變的。

>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])

特殊的tuple元組

#空tuple ()
>>> t = ()
>>> t
()

#一個元素的tuple,必須加','來消除歧義(小括弧就可以表示typle又可以表示數學中的小括弧)
>>> t = (1,)
>>> t
(1,)

dict

dict全稱dictionary,使用鍵-值(key-value)存儲,具有極快的查找速度。用Python寫一個dict如下:

>>> d ={'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95

Tips:dict內部存放的順序和key放入的順序是沒有關係的。

對比於list

dict的特點:1.查找和插入的速度極快,不會隨著key的增加而變慢 2.需要占用大量的記憶體,記憶體浪費多。

而list恰恰相反:1.查找和插入的時間隨著元素的增加而變慢 2.占用空間小,浪費記憶體少。

小結

所以,dict是用空間來換取時間的一種方法。dict可以用在需要高速查找的地方,在Python代碼中幾乎無處不在,正確使用dict就變得十分重要,需要牢記的第一條就是dict的key必須是不可變的對象。dict根據key來計算value的存儲位置(哈希演算法),在Python中,字元串、整數等是不可以變的,而list是可變的,就不能作為key。

set

set和dict類似,也是一組key的集合,但不存儲value,set可以看成數學意義上的無序和無重覆元素的集合。要創建一個set,需要提供一個list作為輸入集合:

>>> s = set([1,2,3])
>>> s
{1, 2, 3}

兩個set可以做數學意義上的交集、並集等操作:

>>> s1 = set([1,2,3])
>>> s2 = set([2,3,4])
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 相信有不少朋友日常工作會用到 Excel 處理各式表格文件,更有甚者可能要花大把時間來做繁瑣耗時的表格整理工作。最近有朋友問可否編程來減輕表格整理工作量,今兒我們就通過實例來實現 Python 對錶格的自動化整理。 首先我們有這麼一份數據表 source.csv: 我們要做的是從上表中提取數據,來生 ...
  • SpringMVC SpringMVC是一種輕量級的、基於MVC的Web層應用框架。 通過一套 MVC 註解,讓 POJO 成為處理請求的控制器,而無須實現任何介面。 採用了鬆散耦合可插拔組件結構,比其他 MVC 框架更具擴展性和靈活性。 優點: 1、天生與Spring框架集成,如:(IOC,AOP ...
  • 本文是針對我的工具 "藍奏雲批量下載工具" 的補充說明筆記,準備按照流程整理我實現軟體的思路與方法。 涉及知識 Java的IO流 Java的下載文件 HtmlUnit的使用方法 okhttp的使用 分析與軟體思路 在某一天,我找到了一部電子書的資源,但是,該藍奏雲地址是一個文件夾,由於藍奏雲不支持批 ...
  • Java 泛型通配符 ? extends super 的用法 示例 1 : ? extends ArrayList heroList 表示這是一個Hero泛型或者其子類泛型 heroList 的泛型可能是Hero heroList 的泛型可能是APHero heroList 的泛型可能是ADHero ...
  • 1. 欄位查詢 通過模型類.objects屬性可以調用如下函數,實現對模型類對應的數據表的查詢。 函數名 功能 返回值 說明 get 返回表中滿足條件的一條且只能有一條數據。 返回值是一個模型類對象。 參數中寫查詢條件。 1)如果查到多條數據,則拋異常MultipleObjectsReturned。 ...
  • 寫在前面 首先,祝大家新年快樂,在國人的情結里,現在才是真正的年底,估計現在好多朋友已經陸續回家過節去了,祝回家的路順風。過年回去就好好陪伴家人,不要看一些毒瘤號寫的,過年時間彎道超越別人,趁著假期學習什麼各種新知識,這完全瞎扯,這一年的時間該努力,努力了,吃苦也吃了,春節就好好陪伴家人吃喝玩樂。 ...
  • Python的駐留機制及為在同一運行空間內,當兩變數的值相同,則地址也相同。 舉例: 以上示例為駐留機制有效的情況下的記憶體地址。 以下為加入非數字、字母、下劃線內容的駐留機制驗證,結果為無效 ...
  • 在經常性讀取大量的數值文件時(比如深度學習訓練數據),可以考慮現將數據存儲為Numpy格式,然後直接使用Numpy去讀取,速度相比為轉化前快很多. 下麵就常用的保存數據到二進位文件和保存數據到文本文件進行介紹: 1.保存為二進位文件(.npy/.npz) numpy.save 保存一個數組到一個二進 ...
一周排行
    -Advertisement-
    Play Games
  • C#TMS系統代碼-基礎頁面BaseCity學習 本人純新手,剛進公司跟領導報道,我說我是java全棧,他問我會不會C#,我說大學學過,他說這個TMS系統就給你來管了。外包已經把代碼給我了,這幾天先把增刪改查的代碼背一下,說不定後面就要趕鴨子上架了 Service頁面 //using => impo ...
  • 委托與事件 委托 委托的定義 委托是C#中的一種類型,用於存儲對方法的引用。它允許將方法作為參數傳遞給其他方法,實現回調、事件處理和動態調用等功能。通俗來講,就是委托包含方法的記憶體地址,方法匹配與委托相同的簽名,因此通過使用正確的參數類型來調用方法。 委托的特性 引用方法:委托允許存儲對方法的引用, ...
  • 前言 這幾天閑來沒事看看ABP vNext的文檔和源碼,關於關於依賴註入(屬性註入)這塊兒產生了興趣。 我們都知道。Volo.ABP 依賴註入容器使用了第三方組件Autofac實現的。有三種註入方式,構造函數註入和方法註入和屬性註入。 ABP的屬性註入原則參考如下: 這時候我就開始疑惑了,因為我知道 ...
  • C#TMS系統代碼-業務頁面ShippingNotice學習 學一個業務頁面,ok,領導開完會就被裁掉了,很突然啊,他收拾東西的時候我還以為他要旅游提前請假了,還在尋思為什麼回家連自己買的幾箱飲料都要叫跑腿帶走,怕被偷嗎?還好我在他開會之前拿了兩瓶芬達 感覺感覺前面的BaseCity差不太多,這邊的 ...
  • 概述:在C#中,通過`Expression`類、`AndAlso`和`OrElse`方法可組合兩個`Expression<Func<T, bool>>`,實現多條件動態查詢。通過創建表達式樹,可輕鬆構建複雜的查詢條件。 在C#中,可以使用AndAlso和OrElse方法組合兩個Expression< ...
  • 閑來無聊在我的Biwen.QuickApi中實現一下極簡的事件匯流排,其實代碼還是蠻簡單的,對於初學者可能有些幫助 就貼出來,有什麼不足的地方也歡迎板磚交流~ 首先定義一個事件約定的空介面 public interface IEvent{} 然後定義事件訂閱者介面 public interface I ...
  • 1. 案例 成某三甲醫預約系統, 該項目在2024年初進行上線測試,在正常運行了兩天後,業務系統報錯:The connection pool has been exhausted, either raise MaxPoolSize (currently 800) or Timeout (curren ...
  • 背景 我們有些工具在 Web 版中已經有了很好的實踐,而在 WPF 中重新開發也是一種費時費力的操作,那麼直接集成則是最省事省力的方法了。 思路解釋 為什麼要使用 WPF?莫問為什麼,老 C# 開發的堅持,另外因為 Windows 上已經裝了 Webview2/edge 整體打包比 electron ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...