需要从python列表中查找子元素

nam*_*mit 3 python iterator list match

我有一个python列表如下

[(u'1', u'0'), (u'2', u'1'), (u'3', u'2'), (u'4', u'3'), (u'5', u'4'), (u'6', u'4'), (u'7', u'4'), (u'8', u'4'), (u'9', u'4'), (u'10', u'4'), (u'11', u'4'), (u'11.5', u'2'), (u'12', u'11.5'), (u'13', u'11.5'), (u'14', u'11.5'), (u'15', u'11.5'), (u'16', u'11.5'), (u'17', u'11.5'), (u'18', u'11.5'), (u'19', u'11.5'), (u'20', u'11.5'), (u'21', u'11.5'), (u'22', u'11.5'), (u'23', u'11.5'), (u'24', u'11.5'), (u'25', u'11.5'), (u'26', u'11.5'), (u'27', u'11.5'), (u'28', u'11.5'), (u'30', u'11.5'), (u'29', u'11.5')]
Run Code Online (Sandbox Code Playgroud)

这里每个元组的第一个位置是它自己的id,而第二个位置是它的父ID.

我想得到所有特定身份的孩子.例如,如果我想获得自己的id"3"的孩子(或孩子的孩子......到n深度)的所有自己的列表.所以答案清单就是[u'4', u'5', u'6', u'7', u'8', u'9', u'10', u'11']

任何方式这样做?

Jon*_*nts 5

你可以使用networkx图书馆......

import networkx as nx
g = nx.DiGraph()
g.add_edges_from( (y,x) for x,y in your_list )
print list(nx.dfs_postorder_nodes(g, '3'))
[u'11', u'10', u'5', u'7', u'6', u'9', u'8', u'4', '3']
Run Code Online (Sandbox Code Playgroud)