【问题标题】:Longest cycle of key-value pairs in a dictionary字典中键值对的最长循环
【发布时间】:2017-04-24 17:56:42
【问题描述】:

我有一个关于 Python 3 的问题,我无法回答。 假设我有以下字典。

{'Noah': 'Liam', 'Ethan': 'Peter', 'Liam': 'Olivia', 'Emma': 'Ethan', 'Peter': 'Emma', 'Olivia': 'Noah'}

我需要在这个字典中找到最长的键值对循环。

在伪代码中是

for key in dictionary:
    find value in dictionary, make this key
    continue process untill start key has been detected

在这个例子中,最长的循环是:

Noah --> Liam --> Olivia --> Noah(长度为3)

我不知道该怎么做,尽管我很清楚自己想做什么。不胜感激。

【问题讨论】:

    标签: dictionary python-3.5


    【解决方案1】:

    您的问题的关键字是递归......或谷歌“链接列表”。在一张纸上画出你想要做的事情,并单独考虑每一步……用这么少的数据是可能的。

    这肯定不是最漂亮的解决方案,但它确实有效。你明白了。

    import copy
    
    people = {'Noah': 'Liam', 'Ethan': 'Peter', 'Liam': 'Olivia', 'Emma': 'Ethan',   'Peter': 'Emma', 'Olivia': 'Noah'}
    
    
    def walk_the_links(person, subtree, counter):
        print(person)
        if person in subtree:
            counter += 1
            next_person = subtree[person]
            subtree.pop(person)
            counter = walk_the_links(next_person, subtree, counter)
        return counter
    
    for person in people:
        subtree = copy.deepcopy(people) 
        counter = 0
        length_tree = walk_the_links(person, subtree, counter)
        print(length_tree)
    

    【讨论】:

    • 相信我...我已经试过了。我可以用 100 种不同的方式向你发布我想出的代码,但这只会告诉你我对如何解决这个问题知之甚少。哦,这不是家庭作业。
    • 别担心,我不想冒犯你。我希望它有所帮助...查看codereview.stackexchange.com 我认为这是一个很好的学习资源。
    猜你喜欢
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多