在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