(ps寫了兩小時的文檔突然斷就沒了!還有兩小時寫上就去坐車車了!)上一節中主要學習了數據類型中的數字類型和字符串,忘記的小夥伴可以複習一下喲!這一節將總結列表,字典,集合等!!這部分內容可說處處可用,不管是後續的爬蟲,數據分析還是機器學習等,所以小夥伴一起加油呀!
文章目錄
1 python數據類型
2 列表
2.1 列表類型
python列表是任意對象的有序結合,表示方式使用**[]**。這個"任意"二字,意思是這裏面的元素可以是單個字符串,也可以是嵌套的列表,也可以是字典等。
list=["保羅","威少","韋德"]
print(list)
list1=[["保羅兒子","保羅老爸"],"威少","韋德"]
print(list1)
print(list[1])# 威少 這裏注意 下標是0開始
2.2 列表的常用方法
方法 | 描述 |
---|---|
list.append(x) | 末尾增加一個元素 |
list.insert(i,x) | 在索引i的位置插入元素x |
list.remove(x) | 移除從左到右第一個出現的x |
list.clear() | 移除列表所有元素 |
list.pop([i]) | 刪除列表中給定元素並返回 |
list.count(x) | 統計x在列表中出現的個數並返回 |
list.sort(key=None, reverse=False) | 對列表中元素進行排序 |
list.reverse() | 翻轉列表中的元素 |
len(list) | 列表中的元素個數 |
小夥伴可以動手嘗試下這些方法喲!
#測試remove方法 刪除第一次出現的元素
list2=["保羅","威少","韋德","保羅"]
#測試count方法
list2.count("保羅")
print(list2)
#測試remove方法
list2.remove("保羅")
print(list2)
#測試sort方法
list2.sort()
#測試reverse方法
print(list2.reverse())
#測試insert方法
list2.insert(2,"科比")
print(list2)
2.3 列表的切片
從字面上來說,“切片”(我去現在好餓呀,想吃麪包了。。)是一個局部概念,也就是滿足從列表中選取一部分元素。
- 表示方法
使用的是":",我們舉個例子
list3=[1,2,3,4,5,6,2,1]
print(list3[0:1])#1 記住之前說好的第一個元素下標是0喲
取出從左到右的前三個數,我們將":"放在前面
print(list3[0:3])#前三個數
print(list3[:3])#前三個數 注意這裏“:”放在了前面
我們將“:”放在X後面會出現什麼情況?將輸出X到末尾元素
print(list3[3:])#[4, 5, 6, 2, 1]
上面我們的取值都是正數,如果是負數呢?
print(list3[-3])#6
print(list3[-3:])#[6,2,1]
print(list3[:-3])#[1, 2, 3, 4, 5]
小結:我們可以通過將":"放在X的不同位置進行取值,通知X可以是負數也可以是正數。
2.4 列表的簡單應用
- 列表作爲棧
什麼是棧?,特點爲先進後出,生活中的場景就是:我們疊盤子的時候,從下往上放,先放在下面的一般來說都會後取出來,這就是典型的棧結構。那麼在算法中常用的比如二進制轉換,二叉樹的非遞歸先序遍歷等
那我們思考怎麼用列表來表達呢?使用append在最後加入元素,然後使用pop彈出來就好了。
#列表作爲棧
stack=[1,2,3]
stack.append(4)
stack.append(5)
print(stack.pop())#5
print(stack.pop())#4
print(stack.pop())#3
- 列表作爲隊列
隊列作爲棧的兄弟,特點不同才能更好的相處,而且正好相反爲先進先出。就好比我們排隊買火車票的場景。
#列表作爲隊列
from collections import deque
deque1=deque(['威少',"保羅","庫裏"])
deque1.append("小庫裏")
deque1.append("裏弗斯")
print(deque1.popleft())#威少
print(deque1.popleft())#保羅
3 元組
3.1 元組類型
元組的表示方式爲"()",元素之間使用逗號分開。而且非常重要的是它裏面的元素是不能修改的。比如
tuple=('威少',"保羅","哈登")
print(tuple)
#tuple([1])="庫裏"
3.2 元組常用方法
列表中的方法元組基本都可以使用。切片也好使。
print(tuple)
print(tuple[:2])#('威少', '保羅')
print(tuple[2:])#('哈登',)
print(tuple[-1:])#('哈登',)
3.3 元組的應用場景
- 元組的賦值(有多少個元素就有多少個變量來接收)
t = ('威少', "保羅", "庫裏")
name1, name2,name3 = t
print(name1, name2,name3)#威少 保羅
- 元組排序
方法一:直接使用函數
scores = (100,20,30,42,78)
scores_sort=sorted(scores)# 默認爲升序
print(scores_sort)#[20, 30, 42, 78, 100] 輸出爲列表
方法二:轉換爲列表再排序
scores = (100,20,30,42,78)
scores_list=list(scores)
scores_list.sort()
print(scores_list)#[20, 30, 42, 78, 100]
- 分割元素爲三部分輸出
scores = (100,20,30,42,78)
minscore,*middlescore,maxscore=scores
print(minscore)#100
print(middlescore)#[20, 30, 42]
print(maxscore)#78
4 集合
4.1 集合類型
集合是一個無序不重複的序列。無序也就意味着不能通過數字進行索引。通常使用set()函數來創建,或者大括號"{}".
#集合
age={18,17,18,12,13}
print(age)#{17, 18, 12, 13}
age1=set([18,17,18,12,13])
print(age1)#{17, 18, 12, 13}
4.2 集合常用方法
- 集合的內置函數
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-kQJ7Tgct-1579212411422)(C:\Users\lj\AppData\Roaming\Typora\typora-user-images\image-20200117041909011.png)]
序號 | 函數 | 描述 |
---|---|---|
1 | add(self, *args, **kwargs) | 是把要傳入的元素做爲一個整個添加到集合中 |
2 | clear(self, *args, **kwargs) | 清空集合裏面的所有元素 |
3 | copy(self, *args, **kwargs) | 複製集合裏面的所有元素 ,返回一個淺複製 |
4 | difference(self, *args, **kwargs) | 求兩個集合裏面的不同的元素 ,又稱差 |
5 | difference_update(self, *args, **kwargs) | 返回刪除了 set “集合2”中含有的元素後的 set “集合1” |
6 | discard(self, *args, **kwargs) | 如果在 set “集合”中存在元素 x, 則刪除 |
7 | intersection(self, *args, **kwargs) | 求兩個集合裏面相同的元素,又稱並 ,返回只保留含有 set “集合2”中元素的 set “集合1” |
8 | intersection_update(self, *args, **kwargs) | 返回只保留含有 set “集合2”中元素的 set “集合1” ,並更新自己 |
9 | isdisjoint(self, *args, **kwargs) | 判斷兩個集合是不是不相交,並返回 |
10 | issubset(self, *args, **kwargs) | 判斷集合是不是包含其他集合,等同於a>=b |
11 | issuperset(self, *args, **kwargs) | 判斷集合是不是被其他集合包含,等同於a<=b |
12 | pop(self, *args, **kwargs) | 刪除並且返回 set “集合”中的一個不確定的元素, 如果爲空則引發 KeyError |
13 | remove(self, *args, **kwargs) | 從 set “集合”中刪除元素 , 如果不存在則引發 KeyError |
14 | symmetric_difference(self, *args, **kwargs) | 返回一個新的 set 包含 外面 和 裏面 中不重複的元素也就是兩個集合不重複的元素 |
15 | symmetric_difference_update(self, *args, **kwargs) | 返回含有 set “裏面”或者 set “外面”中有而不是兩者都有的元素的 set “外面” |
16 | union(self, *args, **kwargs) | 把兩個集合連接起來,又稱並 |
17 | update(self, *args, **kwargs) | 可以在集合裏面添加多項 |
- 代碼實踐
nbaPlaer={'庫裏','湯普森','詹姆斯'}
#添加
nbaPlaer.add("科比")
print(nbaPlaer)
#update可迭代對象
nbaPlaer.update("abcd")
print(nbaPlaer)
#集合的刪除 set.remove(key),元素(鍵)必須存在於集合中,否則會報錯。無返回值
nbaPlaer.remove("a")
#清空
nbaPlaer.clear()
numbers1 = {1,7,3,4,5}
numbers2 = {3,4,2,6,7}
# 對兩個集合進行交集運算
numbers_inter = numbers1 & numbers2
print(numbers_inter)# {3,4,7}
# 對兩個集合進行並集運算
numbers_union = numbers1 | numbers2
print(numbers_union)#{1, 2, 3, 4, 5, 6, 7}
4.3 集合的應用場景
- 運用集合去重
list5={2,2,2,2,4}
set1=set(list5)
print(list5){2, 4}
- 集合關係判定
這裏也就是上面所說的交集,並集,差集,父子集判斷
5 字典
5.1 字典類型
字典可存儲任意類型對象,用{}標識。字典由一個無序的鍵(key)值(value)對的集合。
dic={key1:value1,key2:value2}
5.2 字典4種創建方法
- 使用大括號的方式創建字典
#創建方式1
nab_player_msg = {"name": "庫裏", "age": 30}
- 使用關鍵字參數和類型構造函數來創建字典
#創建方式2
nab_player_msg1 = dict(name = "庫裏", age = 30)
- 使用zip函數將名字和值連接構成字典
#創建方式3
keys=["name",age]
values=["庫裏","30"]
nab_player_msg2 = dict(name = "庫裏", age = 30)
- 使用fromkey通過一個鍵序列和所有的鍵的額可選初始值來創建字典
#創建方式3
keys=["name",age]
nab_player_msg3=dict.fromkeys(keys,"?")
5.3 字典的常用遍歷方式
- 通過遍歷key值遍歷字典
#創建方式1
nab_player_msg = {"name": "庫裏", "age": "30"}
#字典遍歷方式1 通過key
for key in nab_player_msg:
print(key+":"+nab_player_msg[key])
- 通過items遍歷字典
for k,v in nab_player_msg.items():
print(k+":"+v)
- 通過zip遍歷字典
for k,v in zip(nab_player_msg.keys(),nab_player_msg.values()):
print(k+":"+v)
5.4 字典的應用場景
- 使用多個鍵值對,存儲描述一個對象更加複雜的數據信息
- 嵌套的字典
Big_plaer = {
'美國':{
'科比':['得分後衛','牛掰'],
'保羅':['控球后衛','穩']
},
'大陸':{
'姚明':['中鋒','霸氣']
}
}
print(Big_plaer)
for i in Big_plaer:
print(i,Big_plaer[i])
6 總結
不知道你們看完有一點點收穫嗎?如果有收穫希望你
- 點贊 給予我更多鼓勵同時讓更多人學習
- 關注我公衆號[我是程序員小賤]獲取更多的乾貨。相信我不會讓你們失望!