Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの連絡先リストで同じ連絡先を検索する


ユーザー名、メールアドレス、電話番号を任意の順序で保持している連絡先のリストがある場合、同じ連絡先を見つけて(同じ人が多くの異なる連絡先を持っている場合)、同じ連絡先を返す必要があります一緒。そのことを覚えておく必要があります-

  • 連絡先は、任意の順序に従ってユーザー名、電子メール、電話のフィールドを保存できます。

  • 同じユーザー名、同じメールアドレス、同じ電話番号の2つの連絡先は同じです。

したがって、入力がContacts =[{"Amal"、 "[email protected]"、 "+915264"}、{"Bimal"、 "[email protected]"、 " +1234567 "}、{" Amal123 "、" +1234567 "、" [email protected] "}、{" AmalAnother "、" +962547 "、" [email protected] "}]の場合、出力は[インデックス[0,2,3]の連絡先は同じであり、インデックス1の別の連絡先は0,2,3]、[1]です。

これを解決するには、次の手順に従います-

  • 関数generate_graph()を定義します。これにはcnt、n、matrixが必要です

  • 0からnの範囲のiの場合、実行

    • 0からnの範囲のjについては、次のようにします

      • matrix [i、j]:=0

  • 0からnの範囲のiの場合、実行

    • i + 1からnの範囲のjについては、次のようにします

      • cnt[i].slot1がcnt[j].slot1と同じか、cnt[i].slot1がcnt[j].slot2と同じかcnt[i].slot1がcnt[j].slot3またはcnt[ i].slot2はcnt[j].slot1と同じorcnt[i].slot2はcnt[j].slot2と同じまたはcnt[i].slot2はcnt[j].slot3 orcnt[i].slot3と同じcnt[j].slot1と同じまたはcnt[i].slot3がcnt[j].slot2と同じまたはcnt[i].slot3がcnt[j].slot3と同じである場合

        • matrix [i、j]:=1

        • matrix [j、i]:=1

        • ループから出てきます

  • 関数visit_using_dfs()を定義します。これには、i、matrix、visited、sol、n

    が必要です。
  • 訪問した[i]:=True

  • solの最後にiを挿入します

  • 0からnの範囲のjについては、次のようにします

    • matrix [i] [j]がゼロ以外で、visited [j]がゼロ以外の場合、

      • visit_using_dfs(j、matrix、visited、sol、n)

  • メインの方法から、次のようにします-

  • n:=cntのサイズ

  • sol:=新しいリスト

  • matrix:=サイズn x n

    の正方行列を作成します
  • 訪問:=サイズnの配列を作成し、0で埋める

  • generate_graph(cnt、n、matrix)

  • 0からnの範囲のiの場合、実行

    • 訪問されていない場合[i]がゼロ以外の場合、

      • visit_using_dfs(i、matrix、visited、sol、n)

      • solの最後に-1を挿入します

  • 0からsolのサイズまでの範囲のiの場合、実行します

    • sol [i]が-1と同じ場合、

      • 次の行に移動

    • それ以外の場合

      • sol [i]

        を表示します

理解を深めるために、次の実装を見てみましょう-

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", "[email protected]", "+915264"),
   contact("Bimal", "[email protected]", "+1234567"),
   contact("Amal123", "+915264", "[email protected]"),
   contact("AmalAnother", "+962547", "[email protected]")]
get_similar_contacts(cnt)

入力

cnt = [contact("Amal", "[email protected]", "+915264"),
contact("Bimal", "[email protected]", "+1234567"),
contact("Amal123", "+915264", "[email protected]"),
contact("AmalAnother", "+962547", "[email protected]")]

出力

0 2 3
1

  1. リストの累積合計を見つけるPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −リストが与えられたので、累積合計でリストを作成する必要があります。 次に、以下の実装のソリューションを見てみましょう- 例 # cumulative sum def Cumulative(l):    new = []    cumsum = 0    for element in l:       cumsum += element       new.append(cumsum) &

  2. Pythonでリストの平均を見つけますか?

    Pythonは、n個の要素を計算するためのsum関数を提供します。ここでは、この関数を使用して平均を計算します。 アルゴリズム Step 1: input “size of the list” Step 2: input “Element” Step 3: using sum function calculate summation of all numbers. Step 4: calculate average. サンプルコード # Average of a list A=list() n=int(input(Enter the size of the List ::)) print