两列表差的快速算法
我有两个专辑名称的列表,这些列表是按照某种评分顺序排列的。
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