在Python的联系人列表中查找相同的联系人

假设我们有一个以任意顺序保存用户名,电子邮件和号码的联系人列表,我们必须找到相同的联系人(当同一个人有许多不同的联系人时),并将相同的联系人一起返回。我们必须记住-

  • 联系人可以根据任何顺序存储用户名,电子邮件和电话字段。

  • 如果两个联系人具有相同的用户名,相同的电子邮件或相同的号码,则它们是相同的。

因此,如果输入类似于Contacts = [{“ Amal”,“ amal@gmail.com”,“ +915264”},{“ Bimal”,“ bimal321@yahoo.com”,“ +1234567”},{“ Amal123”,“ + 1234567”,“ amal_new@gmail.com”},{“ AmalAnother”,“ + 962547”,“ amal_new@gmail.com”}],则输出为[0,2,3], [1]与索引为[0,2,3]的联系人相同,而另一个索引为1的联系人。

为了解决这个问题,我们将遵循以下步骤-

  • 定义一个函数generate_graph()。这将需要cnt,n,矩阵

  • 对于0到n范围内的i,执行

    • 矩阵[i,j]:= 0

    • 对于0到n范围内的j,执行

    • 对于0到n范围内的i,执行

      • 如果cnt [i] .slot1与cnt [j] .slot1或cnt [i] .slot1与cnt [j] .slot2或cnt [i] .slot1与cnt [j] .slot3或cnt相同[i] .slot2与cnt [j] .slot1或cnt [i] .slot2与cnt [j] .slot2或cnt [i] .slot2与cnt [j] .slot3或cnt [i ] .slot3与cnt [j] .slot1或cnt [i] .slot3与cnt [j] .slot2或cnt [i] .slot3与cnt [j] .slot3相同,然后

      • 矩阵[i,j]:= 1

      • 矩阵[j,i]:= 1

      • 从循环中出来

      • 对于范围i +1至n的j,执行

      • 定义一个函数visit_using_dfs()。这将需要i,矩阵,已访问,sol,n

      • 访问过[i]:=正确

      • 在sol的末尾插入i

      • 对于0到n范围内的j,执行

        • visit_using_dfs(j,矩阵,访问,sol,n)

        • 如果matrix [i] [j]为非零且未访问过的[j]为非零,则

      • 从主要方法中,执行以下操作-

      • n:= cnt的大小

      • sol:=一个新列表

      • 矩阵:=制作大小为nxn的方阵

      • visit:=制作大小为n的数组,并填充0

      • generate_graph(cnt,n,矩阵)

      • 对于0到n范围内的i,执行

        • visit_using_dfs(i,矩阵,访问,sol,n)

        • 在sol的末尾插入-1

        • 如果未访问[i]为非零,则

      • 对于0到sol大小范围内的i

        • 显示溶胶[i]

        • 转到下一行

        • 如果sol [i]与-1相同,则

        • 除此以外,

        例 

        让我们看下面的实现以更好地理解-

        class contact:
           def __init__(self, slot1, slot2, slot3):
              self.slot1 = slot1
              self.slot2 = slot2
              self.slot3 = slot3
        def generate_graph(cnt, n, matrix):
           for i in range(n):
              for j in range(n):
                 matrix[i][j] = 0
           for i in range(n):
              for j in range(i + 1, n):
                 if (cnt[i].slot1 == cnt[j].slot1 or cnt[i].slot1 == cnt[j].slot2 or cnt[i].slot1 == cnt[j].slot3 or cnt[i].slot2 == cnt[j].slot1 or cnt[i].slot2 == cnt[j].slot2 or cnt[i].slot2 == cnt[j].slot3 or cnt[i].slot3 == cnt[j].slot1 or cnt[i].slot3 == cnt[j].slot2 or cnt[i].slot3 == cnt[j].slot3):
                    matrix[i][j] = 1
                    matrix[j][i] = 1
                    break
        def visit_using_dfs(i, matrix, visited, sol, n):
           visited[i] = True
           sol.append(i)
           for j in range(n):
              if (matrix[i][j] and not visited[j]):
                 visit_using_dfs(j, matrix, visited, sol, n)
        def get_similar_contacts(cnt):
           n = len(cnt)
           sol = []
           matrix = [[None] * n for i in range(n)]
           visited = [0] * n
           generate_graph(cnt, n, matrix)
           for i in range(n):
              if (not visited[i]):
                 visit_using_dfs(i, matrix, visited, sol, n)
                 sol.append(-1)
           for i in range(len(sol)):
              if (sol[i] == -1):
                 print()
              else:
                 print(sol[i], end = " ")
        
        cnt = [contact("Amal", "amal@gmail.com", "+915264"),
           contact("Bimal", "bimal321@yahoo.com", "+1234567"),
           contact("Amal123", "+915264", "amal_new@gmail.com"),
           contact("AmalAnother", "+962547", "amal_new@gmail.com")]
        get_similar_contacts(cnt)

        输入值

        cnt = [contact("Amal", "amal@gmail.com", "+915264"),
        contact("Bimal", "bimal321@yahoo.com", "+1234567"),
        contact("Amal123", "+915264", "amal_new@gmail.com"),
        contact("AmalAnother", "+962547", "amal_new@gmail.com")]

        输出结果

        0 2 3
        1
        猜你喜欢