辞書に関する質問があります。再帰関数を使用せずにこれを解決する方法を知りたいのですが(それは要件なので)。 このコードは、ネームリスト内の名前が相互に接続されたランダムな辞書を作成します。コードが何をすべきかは知っていますが、これを行う方法はわかりません。再帰のない辞書のキーと値のペアの最長サイクル
私は、(私はおそらく間違った/醜い方法で)抜き出したキーを必要とします。次に、開始キーが再び値として見つかるまで、コードの最後にある引用符のようにサイクル全体がループされます。ループは終了し、このサイクルの長さを返します。
以下のコードは、間違っていても私が思いついたものです。 の方が先に述べたようにの再帰関数がないといいです。
from random import seed, choice
import time
seed(0)
nameslist = [ "Liam", "Emma", "Noah", "Olivia", ]
# Creates random couples dictionary from a list
def create_dictionary(nlist):
dict = {}
nlistcopy = nlist[:]
for item in nlist:
dict[item] = choice(nlistcopy)
nlistcopy.remove(dict[item])
return dict
# Generates the longest cycle in the couples dictionary, however, the code does not seem to work.
def longest_cycle(dict):
longest = 0
for each in dict:
start = dict[each]
break
each = 0
while each != start :
for each in dict:
each = dict[each]
print(each)
longest += 1
time.sleep(5)
namesdict = create_dictionary(nameslist)
print(longest_cycle(namesdict))
# Dictionary = {'Liam': 'Olivia', 'Noah': 'Liam', 'Olivia': 'Noah', 'Emma': 'Emma'}
# Liam --> Olivia --> Noah --> Liam (longest cycle = 3)!
最終的な名前リストには、はるかに多くの名前が含まれます。この短いバージョンは、テスト目的のためのものです。スリープ時間は、無限ループが私のノートブックをクラッシュさせないように実装されています(私は問題に取り組むためにジュピターのノートブックを使用しています)。前もって感謝します!
[連続したタプルのリストをソートする](http://stackoverflow.com/questions/41221428/sort-a-list-of-tuples-in-consecutive-order) –
私はしませんこれはDFSのように見えます – Har
上記のdupeと同様の各キーから連続したdictのリストを見つける必要があります。カウンターで各キーのパスをマップします。最後にカウンター –