国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python 無限級分類樹狀結(jié)構(gòu)生成算法的實現(xiàn)

Python 無限級分類樹狀結(jié)構(gòu)生成算法的實現(xiàn)

2021-08-27 00:40今日長劍在握 Python

這篇文章主要介紹了Python 無限級分類樹狀結(jié)構(gòu)生成算法的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

后端研發(fā)的同學對無限級分類肯定映像深刻,當初花了不少時間吧?

無限級分類樹狀結(jié)構(gòu)的應用場景很多,例如后端研發(fā)需要把用戶相關(guān)權(quán)限讀取出來并生成樹狀結(jié)構(gòu),前端研發(fā)拿到權(quán)限樹之后可以按照結(jié)構(gòu)展示用戶有權(quán)限訪問的欄目;再例如網(wǎng)頁上的欄目分級:

Python 無限級分類樹狀結(jié)構(gòu)生成算法的實現(xiàn)

作者在初次接觸樹狀結(jié)構(gòu)生成需求的時候,也是撓頭,后來找到了一個代碼少且清晰易懂的生成算法:遞歸。

首先,確保數(shù)據(jù)庫中存儲的類別信息如下:

?
1
2
3
4
5
6
7
8
9
10
[
 {"id": 1, "name": '電器', "parent": 0},
 {"id": 2, "name": '水果', "parent": 0},
 {"id": 3, "name": '家用電器', "parent": 1},
 {"id": 4, "name": '電吹風', "parent": 3},
 {"id": 5, "name": '電風扇', "parent": 3},
 {"id": 6, "name": '臺燈', "parent": 3},
 {"id": 7, "name": '商用電器', "parent": 1},
 {"id": 8, "name": '大型電熱鍋', "parent": 7},
]

字段 parent 記錄的是此條目的父編號,例如電吹風的父編號是 3,即電吹風屬于家用電器,而家用電器的父編號是 1,即家用電器屬于電器類產(chǎn)品。電吹風條目跟電器條目并無直接的標識進行關(guān)聯(lián),但需要用樹狀結(jié)構(gòu)來表明 電器 <- 家用電器 <- 電吹風 的關(guān)系。

通過 parent 尋找父編號,并建立關(guān)聯(lián)關(guān)系的操作實際上是循環(huán)往復的,直到找完所有的結(jié)點,這跟遞歸算法非常契合,很輕松便能寫出對應的遞歸代碼:

?
1
2
3
4
5
6
7
def generate_tree(source, parent):
 tree = []
 for item in source:
 if item["parent"] == parent:
 item["child"] = generate_tree(source, item["id"])
 tree.append(item)
 return tree

只需要將數(shù)據(jù)庫中存儲的信息傳遞給 generate_tree 函數(shù)即可。這段遞歸代碼在往復循環(huán)的過程中通過 parent 來尋找子結(jié)點,找到子結(jié)點后將其添加到樹中。完整代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import json
def generate_tree(source, parent):
 tree = []
 for item in source:
 if item["parent"] == parent:
 item["child"] = generate_tree(source, item["id"])
 tree.append(item)
 return tree
if __name__ == '__main__':
 permission_source = [
 {"id": 1, "name": '電器', "parent": 0},
 {"id": 2, "name": '水果', "parent": 0},
 {"id": 3, "name": '家用電器', "parent": 1},
 {"id": 4, "name": '電吹風', "parent": 2},
 {"id": 5, "name": '電風扇', "parent": 3},
 {"id": 6, "name": '臺燈', "parent": 3},
 {"id": 7, "name": '商用電器', "parent": 1},
 {"id": 8, "name": '大型電熱鍋', "parent": 7},
 ]
 permission_tree = generate_tree(permission_source, 0)
 print(json.dumps(permission_tree, ensure_ascii=false))

你試試運行一下,看看結(jié)構(gòu)是否符合預期。

使用緩存優(yōu)化算法

遞歸算法中有很多重復的計算,這些計算不僅占用額外資源,還會降低函數(shù)執(zhí)行效率,因此需要對遞歸進行優(yōu)化。這里選用緩存優(yōu)化法提升函數(shù)執(zhí)行效率。

基本思路是每次找到結(jié)點關(guān)系后將此條目的編號添加到一個列表中緩存起來,代表此條目已找到結(jié)點關(guān)系。當往復循環(huán)執(zhí)行函數(shù)時再次遇到此條目可以跳過。代碼改動很簡單,增加一個緩存列表和控制流語句即可:

?
1
2
3
4
5
6
7
8
9
10
def generate_tree(source, parent, cache=[]):
 tree = []
 for item in source:
 if item["id"] in cache:
 continue
 if item["parent"] == parent:
 cache.append(item["id"])
 item["child"] = generate_tree(source, item["id"], cache)
 tree.append(item)
 return tree

至此,無限級分類樹狀結(jié)構(gòu)生成算法完成。你學會了嗎?

到此這篇關(guān)于python 無限級分類樹狀結(jié)構(gòu)生成算法的實現(xiàn)的文章就介紹到這了,更多相關(guān)python 無限級分類樹狀結(jié)構(gòu)內(nèi)容請搜索服務器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務器之家!

原文鏈接:https://segmentfault.com/a/1190000039044208

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 中文字幕日韩一区 | 国产欧美综合一区二区三区 | 韩日一区 | 国产精品成人av | av网站观看 | 日韩欧美一区二区在线观看 | 精品福利一区二区三区 | 午夜小视频在线观看 | 伊大人久久香线焦宗合一75大 | 国产黄色在线网站 | 日韩精品一区二区三区av | 国产欧美日韩精品一区 | 欧美激情区 | 日韩国产欧美 | 一区二区日韩 | 玖玖爱视频在线 | 色官网 | 欧美久久久网站 | 国产精品亚洲第一区在线暖暖韩国 | 成人精品 | 91亚洲精品一区 | 精品国产欧美 | 国产最好的精华液网站 | www中文字幕| 最近日本韩国高清免费观看 | 亚洲午夜激情 | 久久合| 婷婷激情综合 | 国产精品1区 | 一区二区精品在线 | 久久天天 | 日本中文字幕在线免费观看 | 久久久999精品视频 亚洲国产网站 | 日本一区二区精品 | 国产片在线 | 一级黄色大片 | 亚洲一区二区精品 | 色橹橹欧美在线观看视频高清 | 日韩国伦理久久一区 | av网站在线播放 | 冥王星之恋泰剧在线观看 |