我需要你的幫助來解決這個問題。
當我使用這段代碼時,我可以得到這個結果。
輸入=[[1],[1,2],[5,7]]
輸出=[[1,2],[5,7]]
Tb2 = Tb[:1]
for t in Tb[1:]:
if set(t).isdisjoint(Tb2[-1]):
Tb2.append(t)
else:
Tb2[-1] = sorted({*t,*Tb2[-1]})
但是當另一個第二個串列在輸入中具有相同的數字時,我無法解決問題。
輸入=[[2,3],[1,2],[5,7],[5,8],[7,8,9],[1]]
預期輸出=[[1,2,3],[5,7,8,9]]
你會給我建議或幫助嗎?
uj5u.com熱心網友回復:
這似乎是圖論中的連通分量問題,因此您可以使用networkx來解決它:
import networkx as nx
from itertools import combinations
# input
lst = [[2, 3], [1, 2], [5, 7], [5, 8], [7, 8, 9], [1]]
# build graph
g = nx.Graph()
g.add_edges_from([edge for ls in lst for edge in combinations(ls, 2)])
# compute components
components = nx.algorithms.components.connected_components(g)
res = list(components)
print(res)
輸出
[{1, 2, 3}, {8, 9, 5, 7}]
這個想法是在同一串列的每對元素之間建立一條邊,這是通過以下串列理解來實作的:
[edge for ls in lst for edge in combinations(ls, 2)]
# [(2, 3), (1, 2), (5, 7), (5, 8), (7, 8), (7, 9), (8, 9)]
完成后,只需connected_components在圖形上運行演算法即可。
uj5u.com熱心網友回復:
for t in Tb:
for j in range(len(Tb2)):
if set(t).isdisjoint(Tb2[j]):
Tb2.append(t)
else:
Tb2[j] = sorted({*t,*Tb2[j]})
輸出= [[1, 2, 3], [5, 7, 8, 9], [5, 7, 8, 9], [7, 8, 9], [1], [1], [1] ]
我無法消除相同和小尺寸的雙串列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/339866.html
下一篇:根據用戶輸入創建元素的子串列
