栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

我想基于相似的属性对元组进行分组

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

我想基于相似的属性对元组进行分组

在填写组件时,在每个阶段都需要考虑三种情况(因为您 必须 匹配重叠的组):

  1. x或y都没有在已找到的任何组件中。
  2. 两者已经在 不同的集合中 ,x在set_i中,y在set_j中。
  3. 一个或两个都在一个组件中,x在set_i中或y在set_i中。

我们可以使用内置的

set
帮助。 (请参阅@jwpat和@DSM的更复杂的示例)

def connected_components(lst):    components = [] # list of sets    for (x,y) in lst:        i = j = set_i = set_j = None        for k, c in enumerate(components): if x in c:     i, set_i = k, c if y in c:     j, set_j = k, c        #case1 (or already in same set)        if i == j:  if i == None:      components.append(set([x,y]))  continue        #case2        if i != None and j != None: components = [components[k] for k in range(len(components)) if k!=i and k!=j] components.append(set_i | set_j) continue        #case3        if j != None: components[j].add(x)        if i != None: components[i].add(y)    return componentslst = [(1, 2), (2, 3), (4, 3), (5, 6), (6, 7), (8, 2)]connected_components(lst)# [set([8, 1, 2, 3, 4]), set([5, 6, 7])]map(list, connected_components(lst))# [[8, 1, 2, 3, 4], [5, 6, 7]]connected_components([(1, 2), (4, 3), (2, 3), (5, 6), (6, 7), (8, 2)])# [set([8, 1, 2, 3, 4]), set([5, 6, 7])] # @jwpat's exampleconnected_components([[1, 3], [2, 4], [3, 4]]# [set([1, 2, 3, 4])] # @DSM's example

这当然不是最有效的方法,但是可能与他们期望的方法类似。 正如乔恩·克莱门茨(Jon Clements)所指出的那样,有一个用于这些类型的计算的库:
networkx
,在该库中它们会更加高效。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/668568.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号