【发布时间】:2016-12-21 11:13:08
【问题描述】:
我有一个关于字典的问题。我想知道如何在不使用递归函数的情况下解决这个问题(因为这是一个要求)。 该代码创建了一个随机字典,其中名称列表中的名称相互连接。我知道代码应该做什么,但不知道如何做到这一点。
我需要成功提取的起始密钥(可能以不正确/丑陋的方式)。然后代码应该循环整个循环,如我的代码底部的引号所示,直到再次找到起始键作为值。然后循环应该结束并返回这个循环的长度。
下面的代码是我设法想出的,即使它是错误的。 如前所述,我更喜欢没有递归函数的答案。
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)!
最终的名称列表将包含更多名称,这个较短的版本仅用于测试目的。实现睡眠时间是为了防止无限循环使我的笔记本崩溃(我正在使用 Jupyter 笔记本来解决这个问题)。提前致谢!
【问题讨论】:
-
我不这么认为,这看起来更像是一个 DFS
-
你需要找到从每个键开始的连续字典列表,类似于上面提到的欺骗。用计数器映射每个键的路径。最后可以根据计数器提取路径
-
@Menno Van Dijk 你应该看看我的回答,你可以在未来使用一些东西
标签: python dictionary