繁体   English   中英

从字符串列表创建一个 python 树

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM