当前位置: 首页 > 面试题库 >

给定n个表示对的元组,返回带有连接的元组的列表

终翔
2023-03-14
问题内容

给定n个元组,编写一个函数,该函数将返回具有连接值的列表。

例:

pairs = [(1,62),
    (1,192),
    (1,168),
    (64,449),
    (263,449),      
    (192,289),
    (128,263),
    (128,345),
    (3,10),
    (10,11)
    ]

结果:

[[1,62,192,168,289],
 [64,449,263,128,345,449],
 [3,10,11]]

我相信可以使用图或树作为数据结构,为每个值创建节点,并为每对边创建边,每个树或图代表连接的值,但是我还没有找到解决方案。

在python中产生产生这些对的连接值列表的结果的最佳方法是什么?


问题答案:

我不知道这个问题已经有了名字(感谢avim!),所以我继续天真地解决了这个问题。

该解决方案有点类似于Eli
Rose的解决方案。我决定发布它,因为对于大对的列表,它的效率更高,因为lists_by_element字典会跟踪元素所在的列表,因此我们可以避免遍历所有列表及其每个项目时间,我们需要添加一个新项目。

这是代码:

def connected_tuples(pairs):
    # for every element, we keep a reference to the list it belongs to
    lists_by_element = {}

    def make_new_list_for(x, y):
        lists_by_element[x] = lists_by_element[y] = [x, y]

    def add_element_to_list(lst, el):
        lst.append(el)
        lists_by_element[el] = lst

    def merge_lists(lst1, lst2):
        merged_list = lst1 + lst2
        for el in merged_list:
            lists_by_element[el] = merged_list

    for x, y in pairs:
        xList = lists_by_element.get(x)
        yList = lists_by_element.get(y)

        if not xList and not yList:
            make_new_list_for(x, y)

        if xList and not yList:
            add_element_to_list(xList, y)

        if yList and not xList:
            add_element_to_list(yList, x)

        if xList and yList and xList != yList:
            merge_lists(xList, yList)

    # return the unique lists present in the dictionary
    return set(tuple(l) for l in lists_by_element.values())

这是它的工作方式:http :
//ideone.com/tz9t7m



 类似资料:
  • 我有一个方法toString,它应该返回数组列表的连接元素字符串。我遇到的问题是无法将T类型的数组列表(因为它应该是泛型的)转换为字符串。

  • 本文向大家介绍从Python中的元组列表中找到包含给定元素的元组,包括了从Python中的元组列表中找到包含给定元素的元组的使用技巧和注意事项,需要的朋友参考一下 列表可以将元组作为其元素。在本文中,我们将学习如何识别包含特定搜索元素(字符串)的元组。 有条件 我们可以根据情况设计跟踪。之后,我们可以提及条件或条件组合。 示例 输出结果 运行上面的代码给我们以下结果- 带过滤器 我们将过滤器功能与

  • 问题内容: 我想编写一个函数,该函数以字母数组作为参数,并选择多个字母。 假设您提供8个字母的数组,并希望从中选择3个字母。然后您将获得: 返回由3个字母组成的数组(或单词)。 问题答案: 格雷码您会遇到的一个问题当然是记忆力,而且很快,您的集合中会有20个元素出现问题-20 C 3 =1140。而且,如果要遍历集合,最好使用修改后的灰色代码算法,因此您不必将所有代码都保存在内存中。这些将根据之前

  • 创建一个数组切片,从 arr 数组的最后一个元素开始向前提取n个元素。 使用 Array.slice() 来创建一个从第 n 个元素开始从末尾的数组。 const takeRight = (arr, n = 1) => arr.slice(arr.length - n, arr.length); takeRight([1, 2, 3], 2); // [ 2, 3 ] takeRight([1,

  • 创建一个数组切片,从arr数组的起始元素开始提取n个元素。 使用 Array.slice() 创建一个数组包含第一个元素开始,到 n 个元素结束的数组。 const take = (arr, n = 1) => arr.slice(0, n); take([1, 2, 3], 5); // [1, 2, 3] take([1, 2, 3], 0); // []

  • 问题内容: 我需要将列表排序为: 我已经使用了该函数,并且能够根据值进行排序…但是我无法按字母顺序进行排序,因为我需要按照数字的降序和字母的升序对列表进行排序数字具有相同的值。 问题答案: 使用元组作为浮点数为负的排序键可以反转顺序: 如果您不能进行求反(例如对字符串或字母值或非数字值),则可以利用Python sort函数稳定的事实,并分两步进行排序:

  • 给定一组未排序的整数,返回大小为k的所有子集(即每组有k个唯一元素),其总和为0。 所以我给了面试官以下解决方案(我在GeekViewpoint上研究过)。没有使用额外的空间,一切都做到位,等等。但当然成本是O(n^k)的高时间复杂度,其中在解决方案中。 但随后她提出了以下要求: 必须在答案中使用hashmap以降低时间复杂度 必须绝对地为一般情况提供时间复杂度 k=6时的提示,O(n^3) 她对

  • 如何利用结构化绑定和元组来返回函数的本地对象? 在函数中,我创建相互引用的本地对象,我希望以元组的形式返回这些对象,并在调用函数时使用结构化绑定来标识它们。我现在有: 这不起作用,我得到一个错误,说返回值不能转换为前面提到的返回类型的元组。我不确定为什么会这样,因为类型与声明匹配。 最终,我试图创建一个方便的函数,这样我就不必每次想创建一个新的所有者时都在函数中键入四行。这是我使用结构化绑定使其更