[英]create a python Tree from a list of strings
我在 windows10 机器上使用最新版本的 python。 我有一份半卡车采用的 10 万条路线的清单。 每条路线只有 1 个单站。 每条路线都起源于城市A,然后到达城市B。 它的结构与此类似:
list_single_stop_routes = [
'cityA to cityB',
'ohio to cali',
'penn to texas',
'cali to tenn',
'tenn to ohio']
我想做的是创建一个“扩展路线”列表,其中每条扩展路线都有一些从城市到城市的任意数量的站点。
我首先从每条路线获取每个城市 A 的列表,并将其用作我的起始位置。 然后我取了相应的cityB,然后遍历每条单站路线,其中我当前的cityB是新的路线cityA。 因此,假设我的出发地是俄亥俄州,那么 cityB 是印第安纳州。 现在我想遍历每条路线以找到印第安纳州是始发地(cityA)的每条路线,我可能会找到一条写着“印第安纳州到德克萨斯州”的路线。 因此,到目前为止,我的结构会说“俄亥俄州到印第安纳州到德克萨斯州”等等,直到(可能)不再建立联系。
我尝试创建字典和列表来帮助我构建输出,但我似乎无法弄清楚究竟什么会起作用。 请记住,必须保持每条路线的正确顺序。 然后我开始考虑某种数据结构,可能类似于树? 最终我想要一个这样的列表:
list_extended_routes = [
"ohio to cali to tenn to texas to flor to nevada to wisconsin to newyork",
"missou to texas to wisconsin to texas to ohio",]
希望有人可以帮助我朝着正确的方向前进? 谢谢!
这本质上是一个图形问题,因此最好使用诸如networkx
类的图形库。
图表如下:
您可以使用以下方法构建它:
list_single_stop_routes = [
'cityA to cityB',
'ohio to cali',
'penn to texas',
'cali to tenn',
'tenn to ohio',
'ohio to indiana'
]
import networkx as nx
G = nx.from_edgelist(s.split(' to ') for s in list_single_stop_routes)
然后很容易找到2个城市(节点)之间的所有路线(路径):
list(nx.all_simple_paths(G, source='indiana', target='tenn'))
输出:
[['indiana', 'ohio', 'cali', 'tenn'], ['indiana', 'ohio', 'tenn']]
如果你想要一个有向图,使用
G = nx.from_edgelist((s.split(' to ') for s in list_single_stop_routes),
create_using=nx.DiGraph)
现在没有从印第安纳州到田纳西州的路线
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.