【python基礎】——數據類型(列表、字典、集合)

駿馬金龍——python語法基礎

python基礎

變量與運算

符號//%**
意義整除整除取余冪次方

數據種類

數據類型
序列-元素具有有序性
非序列-元素無序性
字符串str
元組tuple
列表list
集合set
字典dict
元素不可變
元素不可變
元素可變
元素可變
元素可變

0. 序列

參考:python序列操作

序列(str、list、tuple)可以進行的操作:
通過索引取元素、切片操作、找出第一個元素的位置index()

可變序列(list)可以進行的操作:
**1) 刪除相關操作有del、remove()、pop()、clear()。
2)添加相關操作有append()、extend()、insert()、s *= n
3)拷貝序列copy()、反轉序列reverse()。
4) 注意:列表復制有三種

l0 = [1, 2, 3]
print("l0_:",l0)
l1 = l0
l2 = l0[:]
l4 = l0*4
print("l4_:",l4)
l3 = l0.copy()
l0.append(1000)
l1.append(0)
print("l0:",l0)
print("l1:",l1)
print("l2:",l2)
print("l3:",l3)
print("l4:",l4)

l0_: [1, 2, 3]
l4_: [[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]
l0: [1, 2, 3, 1000, 0]
l1: [1, 2, 3, 1000, 0]
l2: [1, 2, 3]
l3: [1, 2, 3]
l4: [[1, 2, 3, 1000, 0], [1, 2, 3, 1000, 0], [1, 2, 3, 1000, 0], [1, 2, 3, 1000, 0]]
可見:因為可變序列引用的是地址,直接通過賦值的方式進行復制,只是將地址復制了,沒有真正地重新分配另一塊新的地址進行存放,所有當l0和l1任何一方進行改變的時候,都會導致地址的內容發生改變,因此l0和l1會發生改變,而l2,l3是通過copy等方式進行的深層復制,直接分配了一個新的地址進行存儲,因此不會隨l0改變而改變
l4是對列表進行復制,這樣引用的是地址嗎,導致后面也會出現隨動現象

不可變序列(tuple、str)可以進行的操作:
**hash(哈希映射操作):就是根據一定的規則將不可變的序列映射成另一個形式,可以簡單地理解為y = f(x)的形式,最常見的是將不可變序列hash成十進制的數字,一般映射關系是一一對應的

>>> hash("asd")
-2014632507>>> hash((1,23))
1320437575>>> hash([1,23])
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

能夠hash的不可變序列,意味著能作為dict的key,能保存到set或frozenset中


1. 列表

# ----------------------列表的創建------------------
l1 = list()
l2 = []
print("l1:",l1)
print("l2:",l2)

1). 添加元素:append()、extend()、insert()

append()、extend()——前者是將整個添加的對象作為一個整體添加而后者則是將可迭代對象的內層每一個元素單個添加

# ----------------------列表元素的添加---------------------
## 直接在列表最后面進行元素的添加,append,extend
for i in range(10):l1.append(i)l2.append(i+2)
print("l1:",l1)
print("l2:",l2)
l1.extend(l2)
print(l1)## 根據索引將元素插入到指定的位置,列表自動延長,該位置及以后的原來元素向后挪位置
l1 = [1,2,3]
print("插入前:",l1)
l1.insert(1,["插入的元素"])
print("插入后:",l1)

2). 刪除元素:remove()、pop()、del

# -----------------刪除元素------------#
# 直接在列表末尾刪除元素,
popl1 = [1,2,3]
l1.pop()
print(l1)
## 直接移除指定的元素,remove,若要移除的元素不存在報錯
l1 = [1,2,3
l1.remove(2)
print(l1)
del l1[1]

3). 其他操作:reverse()、index()、count()等

# ----------------其他-----------------
## 合并
print(l1 + l2)
## 查找第一個元素的索引
print(l1.index(1))
## 反轉
print(l1.reverse())
## 計數
print(l1.count(1))

注意:


2、字典——{key:value}形式的非序列容器無序數據結構

字典是無序的,和集合一樣,根據索引得到的元素和添加元素的順序是沒有關系的
字典的內部結構> 如上圖所示,字典是一個通過鍵值對進行元素的存放的一個數據結構,key代表元素的唯一標簽。對于字典的操作都是先對key進行hash,然后根據hash值(可以理解為地址)去得到key和value的指針,如:
1)存放字典元素:根據key得到hash值,若hash值對應的指向value的指針不存在,則新創建key-value鍵值對,若存在,則將value值覆蓋為最新的值

1)創建字典

dict1 = {"1":"1","2":2,"3":3}
dict2 = dict(one=1,two=2,three=3)
dict3 = dict([('one',1),("two",2)])
dict4 = dict(zip(("one","two","three"),(1,2,3)))

{‘1’: ‘1’, ‘2’: 2, ‘3’: 3}
{‘one’: 1, ‘two’: 2, ‘three’: 3}
{‘one’: 1, ‘two’: 2}
{‘one’: 1, ‘two’: 2, ‘three’: 3}

在python中,能hashable的數據類型都必須是不可變類型的,所以列表、集合、字典不能作為dict的key,字符串、數值、元組都可以作為dict的key(類的對象實例也可以,因為自定義類的對象默認是不可變的)。

2)初始化字典

dict.fromkeys(序列,默認的字典值)

dict5 = dict.fromkeys("abcd,",2)

3)字典的拷貝

# ------------字典的拷貝--------------------
dict6 = dict1.copy() # 淺拷貝,只是將每一個key的地址給到了新字典
print(dict1)
print(dict6)
print(id(dict1["1"]))
print(id(dict6["1"]))dict6["1"] = 4 # 但是在一個拷貝的字典中發生值的改變值,會為這個鍵新開辟一個地址用于存儲新的值
print(dict1)
print(dict6)
print(id(dict1["1"]))
print(id(dict6["1"]))
print(id(dict1["2"]))
print(id(dict6["2"]))

{‘1’: ‘1’, ‘2’: 2, ‘3’: 3}
{‘1’: ‘1’, ‘2’: 2, ‘3’: 3}
1508279661712
1508279661712
{‘1’: ‘1’, ‘2’: 2, ‘3’: 3}
{‘1’: 4, ‘2’: 2, ‘3’: 3}
1508279661712
140712196691072
140712196691008
140712196691008

4)增刪改查

# --------------------字典的增刪改查-------------------------
## 查詢,根據key查找,不存在時會報錯,可以通過重寫字典類的__missing__方法來實現返回None
dict7 = {"1":"1","2":2,"3":3}
value = dict7["1"]
## 更新
dict7.update({"1":2,"4":5})
dict7["5"] = 6
## pop類
print(dict7.pop("1"))
print(dict7.popitem()) #按照 LIFO(Last In First Out 后進先出法
## 刪除
dict7.update({"1":2,"4":5})
dict7["5"] = 6
del dict7["5"]
dict7.clear()

5)獲得key,value和鍵值對

#--------------------獲得字典key,value,鍵值對,若想對其進行迭代取值,需要利用list進行解析dict8 = {"1":"1","2":2,"3":3}
print(dict8.keys())
print(list(dict8.keys()))
print(dict8.values())
print(dict8.items())
print(iter(dict8))

dict_keys([‘1’, ‘2’, ‘3’])
[‘1’, ‘2’, ‘3’]
dict_values([‘1’, 2, 3])
dict_items([(‘1’, ‘1’), (‘2’, 2), (‘3’, 3)])
<dict_keyiterator object at 0x0000015F2C7BD908>

3、集合set——無value版本的字典

無序、元素不重復、元素可變

1)創建

#創建
set1 = set()
set2 = {1,2,3}

2)集合運算

# 集合運算
set3 = {1,2,3}
set4 = {3,4,5,6}
## 交集
interset = set3&set4
interset2 = set3.intersection(set4)
print(interset)
print(interset2)
## 并集
union1  =set3|set4
union2 = set3.union(set4)
print(union1)
print(union2)
## 差集
diff1 = set3-set4
diff2 = set3.difference(set4)
print(diff1)
print(diff2)
diff3 = set4-set3
diff4 = set4.difference(set3)
print(diff3)
print(diff4)
## XOR集合,非相交部分
xor1 = set3^set4
xor2 = set3.symmetric_difference(set4)
print(xor1)
print(xor2)

{3}
{3}
{1, 2, 3, 4, 5, 6}
{1, 2, 3, 4, 5, 6}
{1, 2}
{1, 2}
{4, 5, 6}
{4, 5, 6}
{1, 2, 4, 5, 6}
{1, 2, 4, 5, 6}

3)其他操作

set5 = {1,2,3,4,5}
print(set5)
set5.add(6)
print(set5)
set5.remove(6)
print(set5)
set5.pop()
print(set5)
set5.clear()
print(set5)

{1, 2, 3, 4, 5}
{1, 2, 3, 4, 5, 6}
{1, 2, 3, 4, 5}
{2, 3, 4, 5}
set()

數據類型總結

數據類型元素支持類型元素可變性元素有序性查找元素的方法
字符串字符不可變有序根據下標索引
列表所有數據類型可變有序根據下標索引
字典鍵(key):不可變數據類型(tuple、str、字符、數值類型等)、可hash的數據類型;值(value):所有數據類型即可可變無序根據鍵key查找
集合所有數據類型(元素不重復)可變無序/
元組所有數據類型不可變有序根據下標索引

參考文獻

https://www.cnblogs.com/f-ck-need-u/p/9832640.html

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

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

相關文章

linux命令:mkdir命令

命令參數&#xff1a; -m, --mode模式&#xff0c;設定權限<模式> (類似 chmod)&#xff0c;而不是 rwxrwxrwx 減 umask -p, --parents 可以是一個路徑名稱。此時若路徑中的某些目錄尚不存在,加上此選項后,系統將自動建立好那些尚不存在的目錄,即一次可以建立多個目錄; …

js設置奇偶行數樣式

$(document).ready(function () {odd { "background": "none" }; //奇數樣式 even { "background": "#f3f3f3" }; //偶數樣式 odd_even(".gys_xq", odd, even);});function odd_even(id, odd, even) {$(id).find("…

貝塞爾曲線切割圓角

ios 系統框架已經給我們提供了相應的切割圓角的方法, 但是如果在一個見面有很多控件切割的話會出現卡頓和個別不切的現象 ?123456789101112131415161718192021222324252627/* 創建一個Button */UIButton * button [UIButton buttonWithType:(UIButtonTypeSystem)];[button se…

機器人實現屠宰自動化

當 WESTFLEISCH 注冊合作社考慮在 Coesfeld 肉類加工中心內自動化原有的人工屠宰設備過程時&#xff0c;首先在“剔除直腸”及“切開盆腔骨及腹部”兩個流程中測試使用了兩臺庫卡機器人。在此過程中&#xff0c;機器人主要以它工作的質量及經濟效益說服了使用者。 實施措施/解…

DOM編程藝術12章

在submit.html中&#xff0c;代碼簡略成如下也行 <article><h1>Thanks!</h1><p>Thanks for contacting us. Well get back to you as soon as we can.</p></article> </body> </html> 說明了只是插入article的部分&#xff0c…

python數據結構《排序專題復習》

目錄 常見的三種排序方法 冒泡排序 插入排序 選擇排序 其他經典的排序方法 快速排序 堆排序 歸并排序 希爾排序 不同排序方法的各維度對比 排序方式的穩定性&#xff1a;若兩個相同的元素在排序前后的相對位置不發生改變的排序為穩定排序&#xff0c;否則不穩定排序 常…

BZOJ2844 albus就是要第一個出場

AC通道&#xff1a;http://www.lydsy.com/JudgeOnline/problem.php?id2844 這題貌似HDU上有一道差不多的題&#xff0c;不過我沒做過&#xff0c;也就沒管了。 首先講一個線性基的東西&#xff0c;大概就是這樣&#xff1a; 然后就是一個什么性質&#xff1a;S異或起來會出現重…

HTG Explains: Why Linux Doesn’t Need Defragmenting

If you’re a Linux user, you’ve probably heard that you don’t need to defragment your Linux file systems. You’ll also notice that Linux distributions don’t come with disk-defragmenting utilities. But why is that? To understand why Linux file systems d…

Spring AOP 實戰運用

Spring AOP 實戰 看了上面這么多的理論知識, 不知道大家有沒有覺得枯燥哈. 不過不要急, 俗話說理論是實踐的基礎, 對 Spring AOP 有了基本的理論認識后, 我們來看一下下面幾個具體的例子吧.下面的幾個例子是我在工作中所遇見的比較常用的 Spring AOP 的使用場景, 我精簡了很多有…

VC Ws2_32.lib

該庫對應WS2_32.DLL&#xff0c;提供了對以下網絡相關API的支持&#xff0c;若使用其中的API&#xff0c;則應該將ws2_32.lib加入工程&#xff08;否則要動態載入WS2_32.DLL&#xff09;。acceptbindcloseSOCKETconnectgetpeernamegetsocknamegetsockopthtonlhtonsioctlsocketi…

大話設計模式之策略模式

第二章&#xff1a;商場促銷——策略模式 策略模式的定義:策略模式是一種定義一系列算法的方法&#xff0c;從概念上來看&#xff0c;所有這些算法完成的都是相同的工作&#xff0c;知識實現不同&#xff0c;他可以以相同的方式調用所有的算法&#xff0c;減少了各類算法類與使…

【Python學習】——語言風格(變量賦值、深淺拷貝、for循環陷阱)

目錄 1、賦值 2、賦值的分類——引用賦值、值賦值 1) 不可變對象引用賦值——字符串、數值、元組等 2&#xff09;可變對象引用賦值——列表、集合、字典 3&#xff09;可變與不可變對象的引用賦值內部分析 4&#xff09;在py文件中&#xff0c;和作用域有關&#xff0c;如…

underscore.js 頁面數據渲染

1.underscore.js 源碼 // Underscore.js 1.8.3 // http://underscorejs.org // (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors // Underscore may be freely distributed under the MIT license.(function() {// …

判斷莊家是否出貨

1. 大盤處于強勢的時候 日平均線在橫盤的時候&#xff0c;緩慢拉升然后急劇下跌 高位盤整的時候 2. 有利好消息發布的時候 因為莊家會利用這個對于散戶來說這個買入時機來進行出貨操作&#xff0c;可見莊家真是陰險狡詐轉載于:https://www.cnblogs.com/dcz1001/p/6115893.html

【深度學習】——常見深度學習模型總結、anchor-free和anchor-based

目錄 1、faster rcnn&#xff1a; 2、SSD&#xff1a; 3、YOLOv1: 小結&#xff1a; 拓展&#xff1a;anchor-based和anchor-free anchor 1、faster rcnn&#xff1a; FasterRcnn 算法原理講解筆記&#xff08;非常詳細&#xff09;https://blog.csdn.net/xjtdw/article…

PHP PDO函數庫詳解

PDO是一個“數據庫訪問抽象層”&#xff0c;作用是統一各種數據庫的訪問接口&#xff0c;與mysql和mysqli的函數庫相比&#xff0c;PDO讓跨數據庫的使用更具有親和力&#xff1b;與ADODB和MDB2相比&#xff0c;PDO更高效。目前而言&#xff0c;實現“數據庫抽象層”任重而道遠&…

數據交互相關分享

Python與web Python Web.py與AJAX交互轉載于:https://juejin.im/post/5a40af3d6fb9a044ff31b1f5

springMVC 相對于 Structs 的優勢

智者說&#xff0c;沒有經過自己的思考和估量&#xff0c;就不能接受別人的東西。資料只能是一個參考&#xff0c;至于是否正確&#xff0c;還得自己去分辨 SpringMVC相對于Structs的幾個優勢&#xff1a; 1、springMVC安全性更高&#xff0c;structs2框架是類級別的攔截&#…

YOLOV1學習

YOLOV1學習&#xff08;輸入的圖像固定大小為448X448X3&#xff09; 參考文獻 模型結構 將輸入的圖像歸一化為大小為448x448x3的圖像&#xff0c;然后將經過中間24層的卷積后得到了7x7x1024的特征圖&#xff0c;然后后面連接的是兩個全連接層&#xff0c;分別是4096和1470&am…

KUKA通信 CREAD問題

嗨。 我想通過串行端口1發送X&#xff0c;Y&#xff0c;Z&#xff0c;A&#xff0c;B&#xff0c;C坐標給機器人。 G1: ...... CREAD(HANDLE,SR_T,MR_T,TIMEOUT,OFFSET,"%F",X) P.XX CREAD(HANDLE,SR_T,MR_T,TIMEOUT,OFFSET,"%F",Y) P.YY ...... GOTO G1…