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

合并元组(如果它们具有一个公共元素)

董翰墨
2023-03-14
问题内容

考虑以下列表:

tuple_list = [('c', 'e'), ('c', 'd'), ('a', 'b'), ('d', 'e')]

我该如何实现?

new_tuple_list = [('c', 'e', 'd'), ('a', 'b')]

我试过了:

for tuple in tuple_list:
    for tup in tuple_list:
        if tuple[0] == tup[0]:
            new_tup = (tuple[0],tuple[1],tup[1])
            new_tuple_list.append(new_tup)

但是,只有当我按一定顺序具有元组的元素时,它才起作用,这意味着它将导致以下结果:

new_tuple_list = [('c', 'e', 'd'), ('a', 'b'), ('d', 'e')]

问题答案:

您可以将元组视为图形中的边,而将目标视为在图形中查找连接的组件。然后,您可以简单地遍历顶点(元组中的项),并为尚未访问的每个顶点执行DFS生成组件:

from collections import defaultdict

def dfs(adj_list, visited, vertex, result, key):
    visited.add(vertex)
    result[key].append(vertex)
    for neighbor in adj_list[vertex]:
        if neighbor not in visited:
            dfs(adj_list, visited, neighbor, result, key)

edges = [('c', 'e'), ('c', 'd'), ('a', 'b'), ('d', 'e')]

adj_list = defaultdict(list)
for x, y in edges:
    adj_list[x].append(y)
    adj_list[y].append(x)

result = defaultdict(list)
visited = set()
for vertex in adj_list:
    if vertex not in visited:
        dfs(adj_list, visited, vertex, result, vertex)

print(result.values())

输出:

[['a', 'b'], ['c', 'e', 'd']]

注意,在上面,组件和组件中的元素都是随机顺序。



 类似资料:
  • 假设我有以下集合: 我正在寻找产生许多集合的交叉点的组合,其中每个元素都是独一无二的。(实际上是一组哈希,其中每个元素都引用回它相交的集合): 将问题归结为,必须满足以下条件: 对于每个初始集 ,每个元素都将位于由最大初始集数的交集创建的结果集中 这意味着,初始集合中的每个元素都需要恰好位于一个结果集中 集合实际上是无限的,这意味着遍历所有有效元素是不可行的,但集合操作很好 可以忽略所有不包含任何

  • 问题内容: 在上一篇文章中,我在sqlite3中具有以下视图: 现在,由于数据是根据和之间的多对多关系生成的,因此我可以得到如下结果: 我想做的是,如果有一家以上的公司(如上),则创建一个查询,输出: 另一个输出: 因此,我本质上需要知道如何合并该表中具有不同值的行的特定列。 有任何想法吗? 以防万一,在第一个查询中显然是文本串联,也就是说, 问题答案: 为此使用聚合函数: (使用表别名使其更短且

  • 问题内容: 这样的情况有效吗? 问题答案: 没有。 元素ID在整个文档中应该是唯一的。

  • 所以我有两个指令列表.. 目标是获得如下所示的最终数据集: 由于我的数据集是针对某一年所有12个月的大量学生的,所以我使用Pandas进行数据采集。这就是我的工作方式: 首先,使用name键将这两个列表组合为一个数据帧。 很明显,最终的数据集并不完全是我想要的。我得到的不是两个月都分开的两个数据集,而是四个月分开的数据集。我该如何解决这个问题呢?我更愿意在熊猫自身中修复它,而不是使用这个最终的输出

  • 问题内容: 如何以简洁明了的方式找出两个列表中的第一个公共元素(在本例中为“ 2”)?任何列表都可以为空,也可以没有公共元素-在这种情况下,没有一个很好。 我需要它来向新手展示python,所以越简单越好。 UPD:顺序对于我的目的并不重要,但让我们假设我正在寻找x中的第一个元素,该元素也出现在y中。 问题答案: 这应该很简单 几乎和它一样有效 (要获得更有效的解决方案,请检查Ashwini Ch

  • 当有两个公共方法并且一个方法调用同一个类中的另一个公共方法时,测试方法的方法是什么? 在这种情况下,我应该如何编写单元测试? 一个例子 这个例子并没有显示所涉及的方法的复杂性,而是概念的复杂性。 我应该分别测试加法和乘法吗?如果我只测试乘法,我觉得我们错过了不能提供参数的情况。 假设要分别测试和,我应该能够模拟?这怎么可能? 假设要分别测试乘法和加法,我不应该模拟,我应该让加法按原样执行吗。如果是