两列表差的快速算法

11 投票
7 回答
1147 浏览
提问于 2025-04-16 07:28

我有两个专辑名称的列表,这些列表是按照某种评分顺序排列的。

albums_today = ['album1', 'album2', 'album3']
albums_yesterday = ['album2', 'album1', 'album3']

我该如何计算列表顺序的变化,并得到类似下面的结果呢?

{'album1':1, 'album2':-1, 'album3':0}

7 个回答

3

你也可以使用我上面提到的相同算法,只需要用一个哈希表就可以了。

def findDelta1(today,yesterday):
 results = {}
 ypos = 0
 for i,title in enumerate(today):
      if title in results:
           results[title] = results[title] - i
      else:
           for ypos in xrange(ypos,len(yesterday)):
                if yesterday[ypos] == title:
                     results[title] = ypos - i
                     ypos = ypos + 1
                     break
                else:
                     results[yesterday[ypos]] = ypos
 return results

这样还是O(N)的复杂度,可能比我上面的版本更快,而且占用的内存也更少。

6
>>> albums_today = ['album1', 'album2', 'album3']
>>> albums_yesterday = ['album2', 'album1', 'album3']
>>> D = dict((k,v) for v,k in enumerate(albums_yesterday))
>>> dict((k,D[k]-v) for v,k in enumerate(albums_today))
{'album1': 1, 'album3': 0, 'album2': -1}
>>> albums_today = ['album1', 'album2', 'album3']
>>> albums_yesterday = ['album2', 'album1', 'album3']
>>> D = {k:v for v,k in enumerate(albums_yesterday)}
>>> {k:D[k]-v for v,k in enumerate(albums_today)}
{'album1': 1, 'album3': 0, 'album2': -1}

在Python2.7或Python3中,可以写得更简单。

0

在编程中,有时候我们会遇到一些问题,可能是因为代码写得不够好,或者是我们对某些概念理解得不够透彻。比如,有人可能会在使用某个功能时,发现它并没有按照预期工作。这时候,我们就需要仔细检查代码,看看是不是哪里出了问题。

有些错误可能是因为我们没有正确使用某个命令,或者是没有理解它的用法。就像在做菜时,如果没有按照食谱来,可能做出来的菜就不好吃。同样,在编程中,遵循正确的步骤和逻辑是非常重要的。

另外,编程中还有很多工具和资源可以帮助我们解决问题,比如在线社区、文档和教程。这些都是我们学习和提高编程技能的好帮手。

总之,遇到问题时不要着急,慢慢分析,查找资料,通常都能找到解决办法。

D = dict((title, rank) for rank, title in enumerate(albums_yesterday))
for rank, title in enumerate(albums_today):
    D[title] = D[title] - rank

撰写回答