示例:
myCmpItem = '511'
myList = ['111','222','333','444','555','123']
(some magic)
mySortedList = ['111', '222', '333', '123', '444', '555']
我可以用很多for循环来编写这个代码,但实际上我正在寻找一种更快的方法来实现这一点。有没有什么算法可以做到这一点呢?快吗?在
所有项目的数字都是问题的答案,我想找到与给定答案集最相似的答案集。所以“123”意味着用户回答问题1=答案1,问题2=答案2,问题3=答案3。它们是选择题,总共有25个问题(=长度为25),并且总有5个不同的可能回答(即数字1-5)。在
PS:这是我在Stackoverflow上问的第一个问题,所以请对我好一点。我已经在google上搜索了好几个小时,但是我没有找到任何解决方案,所以我问了这里。我希望没问题。而且英语不是我的母语。
@larsmans的回答(https://stackoverflow.com/a/10790714/511484)很好地解释了如何以合理的速度解决这个问题。你甚至可以通过提前计算每个数字之间的距离来加快算法的速度,请看@gnibbler的帖子(https://stackoverflow.com/a/10791838/511484)所有其他的答案都很好而且正确,但是我发现@larsmans有最好的解释。再次感谢大家的帮助!在
使用
lambda
和列表理解:首先,从
myCmpItem
生成一个整数列表,使减法成为可能。在然后,定义一个计算项与
^{pr2}$myCmpItem
之间距离的函数。我们还需要将项目映射到整数列表。剩下的只是L1 distance(你正在计算的“差异”的数学名称)的普通公式。在然后,使用这个函数作为
^{3}$key
函数进行排序。在(注:您确定L1距离对这个应用程序有意义吗?使用它表示假设答案1与答案2比答案3更相似,等等。如果不是这样,Hamming distance可能更合适。)相关问题 更多 >
编程相关推荐