簡體   English   中英

列表中路由的列表轉換

[英]List Transformation of Routes in a list

我有一個這樣的路線列表:

routes= 
[[(0, 1), (1, 6), (6, 7), (7, 10), (10, 9), (9, 0)],
 [(0, 2), (2, 3), (3, 4), (4, 5), (5, 0)],
 [(0, 8), (8, 0)]]

路線 1 是從 0 到 1 到 6 到 7 等等....我怎樣才能將這個列表轉換成這樣的列表:

routes_new= [[0, 1, 6, 7, 10, 9, 0], [0, 2, 3, 4, 5, 0],[0,8,0]]

非常感謝!

假設您在這里尋找循環,似乎是這樣,實現您想要的簡單方法是使用 NetworkX 的nx.simple_cycles 這不需要訂購邊緣。

import networkx as nx

routes= [[(0, 1), (1, 6), (6, 7), (7, 10), (10, 9), (9, 0)],
 [(0, 2), (2, 3), (3, 4), (4, 5), (5, 0)],
 [(0, 8), (8, 0)]]

paths = []
for route in routes:
    G = nx.from_edgelist(route, create_using=nx.DiGraph)
    paths.append(list(nx.simple_cycles(G)))

paths
# [[[0, 1, 6, 7, 10, 9]], [[0, 2, 3, 4, 5]], [[0, 8]]]

如果每條路線中可以有多個循環,請檢查循環模塊中的其他功能,例如nx.find_cycle ,它允許您指定原點。

一個簡單的列表理解可以幫助你扁平化你的列表:

routes_new = [[t[0] for t in l]+[l[-1][1]] for l in routes]

注意。 這是假設邊緣是有序且鏈接的。 不進行檢查。 如果不是這種情況,請提供這樣的例子。

output:

[[0, 1, 6, 7, 10, 9, 0], [0, 2, 3, 4, 5, 0], [0, 8, 0]]

您可以只取每個元組的第一個數字並為每條路線添加最后一個:

routes_new = [[val[0] for val in route] + [route[-1][-1]] for route in routes]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM