python層級
Ⅰ python 如何獲取指定層級的大括弧中的內容
#-*-coding:cp936-*-
text="{{{1,2,{3,4},{{{5,6}}}}}}"
defgetbrace(text,level):
result=[]
stack=[]
i=0
whilei<len(text)andtext[i]=="{"andlen(stack)<level:
i+=1
stack.append('{')
whilei<len(text):
iftext[i]=='{':stack.append('{')
iftext[i]=='}':stack.pop()
iflen(stack)>=level:result.append(text[i])
i+=1
return''.join(result)
print(getbrace(text,3))#獲得第3層級大括弧中的內容
Ⅱ OpenCV-Python教程:22.輪廓層級
理論
在前面的關於輪廓的幾節里,我們介紹了輪廓相關的一些函數。但當我們用cv2.findContours()函數來找輪廓的時候,我們傳入了一個參數,Contour Retrieval Mode。我們一般傳的是cv2.RETR_LIST或者cv2.RETR_TREE這樣就可以了。但是這個參數實際是什麼意思呢?
並且在輸出時我們得到了三個數組,第一個是圖像,第二個是我們的輪廓,第三個輸出名字是hierarchy。但是我們一直沒用這個。
什麼是層級?
一般來說我們用cv2.findContours()函數來檢測圖像里的目標,有時候目標在不同的地方,但是在有些情況下,有些圖形在別的圖形裡面,就像圖形嵌套,在這種情況下,我們把外面那層圖形叫做parent,裡面的叫child。這樣圖形里的輪廓之間就有了關系。我們可以指定一個輪廓和其他之間的是如何連接的,這種關系就是層級。
看下面的例子:
在這個圖像里,不同的圖形我標注了0-5,2和2a表示了最外層盒子的外部和內部輪廓。
這里輪廓0,1,2是外部的。我們可以說他們是hierarchy-0,或者他們是同層級的。
接下來是contour-2a,可以認為是輪廓-2的孩子,或者反過來,contour-2是contour-2a的父親,所以它在hierarchy-1里。類似的contour-3是contour-2的孩子,在下一層級。最後contour4,5是contour-3a的孩子,它們在最後的層級。
OpenCV里的層級表示
每個輪廓有他自己的關於層級的信息,誰是他的孩子,誰是他的父親等。OpenCV用一個包含四個值得數組來表示:[Next, Previous, First_Child, Parent]
"Next表明同一層級的下一個輪廓"
比如,在我們的圖片里的contour-0,水上hi他相同層級的下一個輪廓?是contour-1,所以Next=1,對於Contour-1,下一個是contour-2,所以Next=2
那對於contour-2呢?沒有同層級的下一個輪廓,所以Next=-1。那麼對於contour-4呢?同層級的下一個是contour-5,所以下一個輪廓是contour-5.Next=5
"Previous指同層級的前一個輪廓"
和上面一樣,contour-1的前一個是contour-0.contour-2的前一個contour-1.對於contour-0沒有前序,所以-1
"First_Child指它的第一個孩子輪廓"
不用解釋,對於contour-2,孩子是contour-2a,所以這里是contour-2a的索引,contour-3a有兩個孩子,但我們只取第一個,是contour-4,所以First_Child=4.
"Parent指它的父輪廓索引"
和First_Child相反,contour-4和contour-5的parent都是contour-3a,對於contour-3a,是contour-3
注意:
如果沒有孩子或者父親,就為-1
我們知道了層級,現在來看OpenCV里的輪廓獲取模式,四個標志cv2.RETR_LIST, cv2.RETR_TREE, cv2.RETR_CCOMP, cv2.RETR_EXTERNAL表示啥?
輪廓獲取模式
1.RETR_LIST
這是最簡單的一個,它獲取所有輪廓,但是不建立父子關系,他們都是一個層級。
所以,層級屬性第三個和第四個欄位(父子)都是-1,但是Next和Previous還是有對應值。
下面是結果,每行是對應輪廓的層級信息。
>>> hierarchy
2.RETR_EXTERNAL
如果用這個模式,它返回最外層的。所有孩子輪廓都不要,我們可以說在這種情況下,只有家族裡最老的會被照顧,其他都不管。
所以在我們的圖像里,有多少最外層的輪廓呢,有3個,contours 0,1,2
3.RETR_CCOMP
這個模式獲取所有輪廓並且把他們組織到一個2層結構里,對象的輪廓外邊界在等級1里,輪廓內沿(如果有的話)放在層級2里。如果別的對象在它裡面,裡面的對象輪廓還是放在層級1里,它的內沿在層級2.
看下面的例子,輪廓的順序為紅色,他們的層級是綠色,
看第一個輪廓,contour-0,他的層級是1,他有兩個洞,contours1和2,他們都屬於層級2,所以對於contour-0,Next是contour-3,沒有前序,他的第一個孩子是contour-1,沒有parent,所以層級數組是[3,-1,1,-1]
看contour-1,他在層級2里,Next是contour-2,沒有前序,沒有孩子,parent是contour-0,所以數組是[2,-1,-1,0]
同樣對於contour-2,也在層級2里,沒有next,前序是contour-1,沒有孩子,parent是contour-0,所以[-1,1,-1,0]。
contour-3:next是contour-5,Previous是contour-0,Child是contour-4,沒有parent,所以[5,0,4,-1]
contour-4:在層級2里,沒有兄弟,所以沒有Next,沒有Previous,沒有孩子,parent是contour-3,[-1,-1,-1,3]
4.RETR_TREE
最後,Mr.Perfect。它取回所有的輪廓並且創建完整的家族層級列表,它甚至能告訴你誰是祖父,父親,兒子,孫子。。
比如把上面的圖形用cv2.RETR_TREE,
對於contour-0:層級是0,Next是contour-7,沒有previous,孩子是contour-1,沒有parent,所以[7,-1,1,-1]
contour-1:在層級1里,沒有同級的其他輪廓,沒有previous,孩子是contour-2,所以[-1,-1,2,0]
OpenCV里的直方圖
Ⅲ python語言採用什麼區分代碼層次
Python語言採用嚴格的「縮進」來表明程序的格式框架。縮進指每一行代碼開始前的空白區域,用來表示代碼之間的包含和層次關系。
1個縮進=4個空格。縮進是Python語言中表明程序框架的唯一一手段當表達分支、循環、函數、類等程序含義時,在if、while、for、def、class等保留字所在完整語句後通過英文冒號(:)結尾並在之後進行縮進,表明後續代碼與緊鄰無縮進語句的所屬關系。
優點:
在計算機內部,Python解釋器把源代碼轉換成稱為位元組碼的中間形式,然後再把它翻譯成計算機使用的機器語言並運行。這使得使用Python更加簡單。也使得Python程序更加易於移植。
面向對象:Python既支持面向過程的編程也支持面向對象的編程。在「面向過程」的語言中,程序是由過程或僅僅是可重用代碼的函數構建起來的。在「面向對象」的語言中,程序是由數據和功能組合而成的對象構建起來的。
以上內容參考:網路-Python
Ⅳ Python中建議使用幾個空格表示1級縮
在 Python 中,建議使用四個空格表示 1 級縮進。
在 Python 中,縮進用來表示代碼塊的層級結構。它的作用與其他語言中的大括弧或關鍵字(例如 if、for、while 等)相同,用來表示代碼塊的開始和結束。
Python 的縮進需要遵循一些原則,包括:
使用四個空格表示 1 級縮進。
相同層級的代碼塊應該使用相同數量的縮進。
所有代碼塊的縮進量必須相同。
不能混用空格和製表符(tab)來進行縮進。
Ⅳ Python 實現遞歸
一、使用遞歸的背景
先來看一個☝️介面結構:
這個孩子,他是一個列表,下面有6個元素
展開children下第一個元素[0]看看:
發現[0]除了包含一些欄位信息,還包含了 children 這個欄位(喜當爹),同時這個children下包含了2個元素:
展開他的第一個元素,不出所料,也含有children欄位(人均有娃)
可以理解為children是個對象,他包含了一些屬性,特別的是其中有一個屬性與父級children是一模一樣的,他包含父級children所有的屬性。
比如每個children都包含了一個name欄位,我們要拿到所有children里name欄位的值,這時候就要用到遞歸啦~
二、find_children.py
拆分理解:
1.首先import requests庫,用它請求並獲取介面返回的數據
2.若children以上還有很多層級,可以縮小數據范圍,定位到children的上一層級
3.來看看定義的函數
我們的函數調用:find_children(node_f, 'children')
其中,node_f:json欄位
children:遞歸對象
以下這段是實現遞歸的核心:
if items['children']:
items['children']不為None,表示該元素下的children欄位還有子類數據值,此時滿足if條件,可理解為 if 1。
items['children']為None,表示該元素下children值為None,沒有後續可遞歸值,此時不滿足if條件,可理解為 if 0,不會再執行if下的語句(不會再遞歸)。
至此,每一層級中children的name以及下一層級children的name就都取出來了
希望到這里能幫助大家理解遞歸的思路,以後根據這個模板直接套用就行
(晚安啦~)
源碼參考: https://www.coder4.com/archives/5767
Ⅵ Python 數據處理(二十八)—— MultiIndex 分層索引
本節將介紹使用多級索引(分層索引)和其他高級索引技巧
分層或多級次索引的存在是非常有意義的,因為它打開了復雜的數據分析和操作的大門,特別是處理高維數據
從本質上講,它允許您在較低維度的數據結構包括 Series(1d) 和 DataFrame(2d) 中存儲和操作任意維度的數據
在本節中,我們將展示分層索引的確切含義,以及如何結合前面介紹的所有 pandas 索引功能使用
在 0.24.0 版本之後, MultiIndex.label 重命名為 MultiIndex.codes 。 MultiIndex.set_labels 重命名為 MultiIndex.set_codes .
MultiIndex 對象是標准 Index 對象的分層模式,它通常在 pandas 對象中存儲軸標簽
你可以把 MultiIndex 看成一個元組數組,其中每個元組都是唯一的。 MultiIndex 有如下創建方式
當傳遞給 Index 構造函數一個元組列表時,它將嘗試返回一個 MultiIndex 。
下面的示例演示了初始化 MultiIndex 的不同方法。
當你想要對兩個可迭代對象中的每個元素進行兩兩配對時,可以使用 MultiIndex.from_proct()
您也可以使用 MultiIndex.from_frame() 方法直接從 DataFrame 中構造一個 MultiIndex 。
為了方便起見,你可以直接將數組列表傳遞給 Series 或 DataFrame 的 index 參數來自動構造一個 MultiIndex
所有的 MultiIndex 構造函數都接受一個 name 參數,該參數存儲索引級別的名稱。如果沒有設置,則值為 None
索引可以放在任何軸上,索引的層級也可以隨你設置
這已經簡化了較高層次的索引,使控制台的輸出更容易看清。
注意 ,索引的顯示方式可以通過 pandas.set_options() 中的 multi_sparse 選項來控制。
值得注意的是,將元組用作軸上的原子標簽也是可以的
多索引之所以重要,是因為它允許您執行分組、選擇和重塑操作,我們將在下面以及後續部分中描述這些操作
get_level_values() 方法能夠返回特定級別的標簽向量
分級索引的一個重要特性是,您可以通過標識數據中的子組的部分標簽來選擇數據
部分選擇以一種完全類似於在常規 DataFrame 中選擇列的方式,返回的結果會 "降低" 分層索引的級別
MultiIndex 會保留索引的所有已經定義了的級別,盡管它們實際上可能並沒有被使用。
在對索引進行切片時,您可能會注意到這一點。例如
這樣做的目的是為了避免重新計算級別,以提高切片的性能。如果你只想看某一級別,可以使用 get_level_values() 方法
可以使用 remove_unused_levels() 方法重構 MultiIndex
在具有 MultiIndex 的不同索引對象之間的操作會自動對齊
Series/DataFrames 的 reindex() 方法可以傳入一個 MultiIndex ,甚至可以是一個元組列表或元組數組
Ⅶ 一個關於Python層級套層級的問題
你這完全就是二叉樹的遍歷呀。
http://ke..com/view/549587.htm?fr=aladdin
自己網路「二叉樹的遍歷」
不太明白你說的什麼意思,看完二叉樹的遍歷,你應該就會了
http://blog.csdn.net/sjf0115/article/details/8645991 隨便找的,你自己找找看
這個是python 遞歸遍歷的 很簡單 只是你說的數據結構不太清楚
http://www.cnblogs.com/yupeng/p/3414451.html
Ⅷ python按層級找出xml文件的差異
使用Python可以按層級比較XML文件的差異,可以使用lxml包中的diff函數,允許指定差異深度,而深度需要根據兩個XML文件的差異而定。另外還可以使用difflib庫中的diff()函數,它返回XML文件樹形結構差異,可以輕松實現層級比對。
Ⅸ python代碼中層次表明不需要使用空格縮進正確還是錯
python代碼中層次表明不需要使用空格縮進是錯的。不要混合使用製表符和空格來縮進,這在跨越不同的台的時候,無法正常工作。在每個縮進層次使用單個製表符或兩個或四個空格。選擇這三種縮進風格之一。Python的縮進是一個優點,剛開始不是非常的習慣,慢慢就行了。