【发布时间】:2012-12-10 20:34:55
【问题描述】:
我有一个元组列表。 [ (1, 2), (2, 3), (4, 3), (5, 6), (6, 7), (8, 2) ]
我想根据连接的元组(具有相关值)将它们分组到列表中。
所以最终结果是两个相关元组值的列表 = [ [1, 2, 3, 4, 8], [5, 6, 7] ]
如何编写函数来执行此操作?这是一个求职面试问题。我试图在 Python 中做到这一点,但我很沮丧,只想看看答案背后的逻辑,所以即使是伪代码也会帮助我,所以我可以看到我做错了什么。
我只有几分钟的时间来现场做这件事,但这是我尝试过的:
def find_partitions(connections):
theBigList = [] # List of Lists
list1 = [] # The initial list to store lists
theBigList.append(list1)
for list in theBigList:
list.append(connection[1[0], 1[1]])
for i in connections:
if i[0] in list or i[1] in list:
list.append(i[0], i[1])
else:
newList = []
theBigList.append(newList)
本质上,这家伙想要一个相关值列表的列表。 我尝试使用for循环,但意识到它不起作用,然后时间用完了。
【问题讨论】:
-
你累了什么? Stack Overflow 旨在帮助您解决确切的问题,而不是为您解决问题。
-
如果输入列表是:
[ (1, 2), (4, 3), (2, 3), (5, 6), (6, 7), (8, 2) ]——同样的事情,你会期待什么结果? -
如果输入列表是那个,那么是的,同样的返回列表。
-
你可以看看源代码
networkx是如何做到的:import networkx as nx; g = nx.Graph([ (1, 2), (2, 3), (4, 3), (5, 6), (6, 7), (8, 2) ]); nx.connected_components(g) [[8, 1, 2, 3, 4], [5, 6, 7]] -
听起来像是连接问题 (en.wikipedia.org/wiki/Connectivity_%28graph_theory%29)。每个数字都是图中的一个节点,元组对是边,您希望通过连接节点的“岛”对节点进行分类。 wiki 文章在“计算方面”下有一些伪代码,可能会对您有所帮助。