Python入門(三):數據結構
- 2019 年 12 月 26 日
- 筆記
01
字符串 str
- 可以使用單引號、雙引號、三引號指代字符串。
- 獲取字符串:
使用數字下標(python索引從0開始)
使用切片
[m:n]表示第m至n-1個元素,
[:m]表示開始至m-1個元素,
[m:]表示第m個元素至字符串末尾
[-1]表示最後一個元素

- 字符串格式化:
用+完成字符串拼接,無分隔符
用"分隔符".join完成字符串拼接,且自定義分隔符
使用format函數,{}是佔位符,用來存儲變量

- 字符串常用方法列表:
string.lower():轉換 string 中的大寫字母為小寫
string.upper():轉換 string 中的小寫字母為大寫
string.title():所有單詞都是以大寫開始
string.lstrip():截掉 string 左邊的空格
string.rstrip():刪除 string 字符串末尾的空格
還有很多方法,這裡就不一一列舉了。
02
列表 list
保存有序項集合、大小可變(可以增加和刪除項)的數據結構。
- 索引和切片
索引從0開始,至列表長度-1
索引可以是負數,代表從列表末尾往前數
切換list[begin:end],獲取切換list內元素,從begin開始,至end結束,不包含end
索引和切換對應的值都可以修改

- 常用方法
list.append(item),在列表末尾新增一個元素
list.extend(list),在列表末尾新增一個列表
list + list,返回一個新的List合併的list
list.clear(),清空列表中的所有元素
len(list),返回列表的元素個數

for i in list:
print(i) #按順序遍歷列表
for idx,value in enumerate(list):
print(idx, value) #用下標和數值遍歷列表
for idx in range(len(list)):
print(idx, list[idx]) #用下標和數值遍歷列表

list.sort(key=None, reverse=False),對list進行排序
list.reverse(),翻轉list自身

- 列表推導式
列表推導式(又稱列表解析式)提供了一種簡明扼要的方法來創建列表。

case1:計算10以內的所有偶數的平方,存入一個列表 如果不用列表推導式:squares = []for x in range(10): ifx%2 == 0: squares.append(x*x) 如果使用列表推導式:squares = [x*x for x in range(10) if x %2== 0]

03、元組 tuple
- 一種類似列表的數據序列類型
- 要點是不可變,不可以添加、刪除、更新元素
- 用兩個小括號包括起來,元素之間用逗號分隔
- 創建方式
student = (1001, 'xiaoming', 20)# 元組的括號可以省略:tup = "a", "b", "c", "d"# 創建空元組和單個元素元組的方式:tup = ()tup = (50,)
- 索引和切片
# 元組和列表一樣支持索引和切片,但是不能更改元素# 得到單個元素tup[idx]# 得到切片,類型也是元組tup[begin:end]# 給元素賦值將會報錯student[0] = 1002 會報錯

- 常用方法:
len(tup),得到元素個數tup1+tup2,合併兩個元組,得到一個新的元組e in tup,判斷元素是否在元組中for x in tup: print(x),用for循環遍曆元組tuple(list),把一個列表變成元組x,y,z=tuple,將tuple的元素挨個拆包賦值給x,y,z

04
字典 dict
字典dict是一種KEY:VALUE的數據結構,可以根據KEY設置和獲取對應的VALUE
語法: dict = {key1:value1, key2:value2}舉例: d = {"id":123, "name":"liming"}
- 字典dict和列表list的對比
列表用順序數字做索引,字典用Key做索引,相當於給每個元素進行了命名("3號學生"和"xm同學"的區別)
如果有一個數據列表:[(11, A), (12, B), (13, C)],要在其中查找B這個條目,需要遍歷列表查找;
如果使用字典{A:11, B:12, C:13},直接使用get(B)取出,字典具有超級快的按KEY查找速度;
- 創建方式:
d = {"id":123, "name":"liming", "age":20}創建空列表:d = {}
- 獲取數據:
print(d["id"], d["name"])如果key不存在就報錯,比如d["xx"]報錯
- 新增、修改數據:
d["id"] = 456如果"id"這個key不存在,就新增一個鍵值對如果"id"這個key已經存在,就修改"id"對應的value值
- 特點:
字典的KEY一定不會重複的字典的Key要求不可變,可用數字、字符串、元組,不能是可變的列表

- 常用方法:
len(dict) 字典的key/value對個數,也等於key的個數str(dict) 字典的字符串形式type(dict) 字典的類型,輸出dictdict.clear() 清空字典的所有內容dict.get(key, default) 獲取key的value內容,如果key不存在,返回默認值defaultkey in dict 判斷key是否在dict的鍵中dict1.update(dict2) 將dict2的所有鍵值對,更新到dict1,也就是合併字典{x:x*x for x in range(10)} 字典推導式

- 三種常用的字典遍歷方法:
dict.items() 以列表返回可遍歷的(鍵,值)元組數組,常用於for遍歷dict.keys() 以列表返回字典所有的鍵dict.values() 以列表返回字典的所有的值

05
集合 set
集合set是一組無序並且沒有重複元素的KEY集合;
set跟dict的key類似,區別在於set沒有value;
key無序,所以set不支持數字索引和切片(dict也不支持);
- 使用場景:
1、判斷某個元素是否在集合set中(set比list速度快);
2、消除輸入數據的重複元素;
- 特點:
和dict一樣,set的key只能是數字、字符串、元組等不可變對象,不能是列表等可變對象。
- 創建方式:
創建一個空集合:s = set()創建一個初始化集合方法1:s = {1,2,2,3}創建一個初始化集合方法2:s = set([1,2,2,3]) 這裡的參數可以是列表、元組、字符串創建空集合不能用s = {},因為這樣創建了dict字典
- 常用方法:
len(set) 集合的元素個數for x in set 集合的遍歷set.add(key) 新增一個KEY,如果有重複會自動去重set.remove(key) 刪除一個KEYset.clear() 清空setx in set 判斷元素是否在set集合中s1 & s2或者s1.intersection(s2) 求兩個集合的交集s1 | s2或者s1.union(s2) 求兩個集合的並集s1 - s2或者s1.difference(s2) 求兩個集合的差集s1.update(s2) 將s2的所有key更新到s1,會去除重複集合推導式:s = {x for x in 'abcd' if x not in 'bc'}
