[英]Merge list of tuples representing graph edges based off common values
我正在嘗試編寫一些 python 代碼,如果給定一個表示圖形上有向邊的元組列表,我將返回所有可能的路徑。 在這種情況下,圖將不包含循環,並且圖中的每個節點只能連接到另一個節點。 輸入將采用以下形式
[(1909, 1910), (1910, 1900), (1922, 1920), (1935,1922), (1940, 1939)]
並且應該以以下形式返回一些東西
[(1909,1910,1900), (1935,1922,1920), (1940,1939)]
我不知道如何解決這個問題,因為必須保持順序,即因為 1922 年在 1920 年之前,1935 年在 1922 年之前,結果答案必須是 (1935,1922,1920)
關於如何實現這一目標的任何想法?
您可以將元組轉換為以第一個項目為鍵的字典,然后通過鏈接每個項目的最后一個元素來逐步合並項目。
tuples = [(1909, 1910), (1910, 1900), (1922, 1920), (1935,1922), (1940, 1939)]
links = { a:[b] for a,b in tuples }
while True:
toMerge = [(a,bs[-1]) for a,bs in links.items() if bs[-1] in links]
for a,b in toMerge:
links[a].append(b)
del links[b]
else: break
result = [ [a,*bs] for a,bs in links.items() ]
print(result)
# [[1909, 1910, 1910], [1935, 1922, 1922], [1940, 1939]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.