python便利
① python 二叉樹的創建和遍歷、重建
幾個有限元素的集合,該集合為空或者由一個根(Root)的元素及兩不相交的(左子樹和右子樹)的二叉樹組成,是有序樹,當集合為空時,稱為空二叉樹,在二叉樹中,一個元素也稱為一個結點。
前序遍歷:若二叉樹為空,則空操作返回,否則先訪問根結點,然後前序遍歷左子樹,再前序遍歷右子樹
中序遍歷:若樹為空,則空操作返回,否則從根結點開始(不是先訪問根結點),中序遍歷根結點的左子樹,然後訪問根節點,最後中序遍歷右子樹。
後序遍歷:若樹為空,則空操作返回,否則從左到右先訪問葉子結點後結點的方式遍歷左右子樹,最後訪問根節點。
層序遍歷:若樹為空,則空操作返回,否則從樹的每一層,即從根節點開始訪問,從上到下逐層遍歷,在同一層中,按從左到右的順序對結點逐個訪問。
假設已知後序遍歷和中序遍歷結果,從後序遍歷的結果可以等到最後一個訪問的結點是根節點,對於最簡單的二叉樹,此時在中序遍歷中找到根節點之後,可以分辨出左右子樹,這樣就可以重建出這個最簡單的二叉樹了。而對於更為復雜的二叉樹,重建得到根結點和暫時混亂的左右結點,通過遞歸將左右結點依次重建為子二叉樹,即可完成整個二叉樹的重建。(在得到根結點之後,需要在中序遍歷序列中尋找根結點的位置,並將中序序列拆分為左右部分,所以要求序列中不能有相同的數字,這是序列重建為二叉樹的前提。)
Root =None
strs="abc##d##e##" #前序遍歷擴展的二叉樹序列
vals =list(strs)
Roots=Create_Tree(Root,vals)#Roots就是我們要的二叉樹的根節點。
print(Roots)
inorderSearch = inOrderTraverse2(Roots)
print(inorderSearch)
② python3字典遍歷
(1)遍歷key值
在使用上,for key in a和 for key in a.keys():完全等價。
(2)遍歷value值
(3)遍歷字典項
(4)遍歷字典健值
在使用上for key,value in a.items()與for (key,value) in a.items()完全等價
③ Python字典鍵值對的添加和遍歷
添加鍵值對
首先定義一個空字典
>>> dic={}
直接對字典中不存在的key進行賦值來添加
>>> dic['name']='zhangsan'
>>> dic
{'name': 'zhangsan'}
如果key或value都是變數也可以用這種方法
>>> key='age'
>>> value=30
>>> dic[key]=value
>>> dic
{'age': 30. 'name': 'zhangsan'}
這里可以看到字典中的數據並不是按先後順序排列的,如果有興趣,可以搜一搜數據結構中的——哈希表
從python3.7開始,字典按照插入順序,實現了有序。修改一個已存在的key的值,不影響順序,如果刪了一個key後再添加該key,該key會被添加至末尾。標准json庫的mp(s)/load(s)也是有序的
還可以用字典的setdefault方法
>>> dic.setdefault('sex','male')
'male'
>>> key='id'
>>> value='001'
>>> dic.setdefault(key,value)
'001'
>>> dic
{'id': '001', 'age': 30. 'name': 'zhangsan', 'sex': 'male'}
④ Python中如何遍歷指定目錄下的所有文件
例如:在C:\TDDOWNLOAD目錄下有a.txt、b.txt兩個文件,另有\sub1子文件夾,C:\TDDOWNLOAD\sub1下又有c.txt、d.txt兩個文件。
1.
os.walk
os.walk()返回一個三元素的tuple:當前路徑、子文件夾名稱、文件列表。>>>
import
os>>>
def
fun(
path
):...
for
root,
dirs,
files
in
os.walk(
path
):...
for
fn
in
files:...
print
root,
fn...
>>>
fun(
r'C:\TDDOWNLOAD'
)C:\TDDOWNLOAD
a.txtC:\TDDOWNLOAD
b.txtC:\TDDOWNLOAD\sub1
c.txtC:\TDDOWNLOAD\sub1
d.txt>>>
2.
glob.glob
glob.glob()只接受一個參數,這個參數既代有路徑,又代有匹配模式,返回值為一個列表。注意,glob.glob()無法直接穿透子文件夾,需要自己處理:>>>
def
fun(
path
):...
for
fn
in
glob.glob(
path
+
os.sep
+
'*'
):
#
'*'代表匹配所有文件...
if
os.path.isdir(
fn
):
#
如果結果為文件夾...
fun(
fn
)
#
遞歸...
else:...
print
fn...
>>>
fun(
r'C:\TDDOWNLOAD'
)C:\TDDOWNLOAD\a.txtC:\TDDOWNLOAD\b.txtC:\TDDOWNLOAD\sub1\c.txtC:\TDDOWNLOAD\sub1\d.txt>>>
'*'為匹配模式,代表匹配所有文件,只有這樣才能將子文件夾查出來,以便遞歸深入,探查下一層的文件。