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