如何基于共享项有效地分组对?
发布时间:2020-12-20 11:10:08 所属栏目:Python 来源:网络整理
导读:我有一个对(元组)列表,为简化这样的事情: L = [("A","B"),("B","C"),("C","D"),("E","F"),("G","H"),("H","I"),"J")] 使用python我想有效地将??此列表拆分为: L1 = [("A","D")]L2 = [("E","F")]L3 = [("G","J"),"I")] 如何有效地将列表拆分为成对的组,对于
我有一个对(元组)列表,为简化这样的事情:
L = [("A","B"),("B","C"),("C","D"),("E","F"),("G","H"),("H","I"),"J")] 使用python我想有效地将??此列表拆分为: L1 = [("A","D")] L2 = [("E","F")] L3 = [("G","J"),"I")] 如何有效地将列表拆分为成对的组,对于组中的对,必须始终至少有一对与其他对共享一个项目?如其中一个答案中所述,这实际上是网络问题.目标是有效地将网络分成不连续(隔离)的网络部分. 可以更改类型列表,元组(集合)以实现更高的效率. 解决方法
这更像是一个网络问题,所以我们使用网络
import networkx as nx G=nx.from_edgelist(L) l=list(nx.connected_components(G)) # after that we create the map dict,for get the unique id for each nodes mapdict={z:x for x,y in enumerate(l) for z in y } # then append the id back to original data for groupby newlist=[ x+(mapdict[x[0]],)for x in L] import itertools #using groupby make the same id into one sublist newlist=sorted(newlist,key=lambda x : x[2]) yourlist=[list(y) for x,y in itertools.groupby(newlist,key=lambda x : x[2])] yourlist [[('A','B',0),('B','C',('C','D',0)],[('E','F',1)],[('G','H',2),('H','I',('G','J',2)]] 匹配您的输出 L1,L2,L3=[[y[:2]for y in x] for x in yourlist] L1 [('A','B'),'C'),'D')] L2 [('E','F')] L3 [('G','H'),'I'),'J')] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |