我想按每个项目的数字对列表进行排序。
例子:
myCmpItem = '511'
myList = ['111','222','333','444','555','123']
(some magic)
mySortedList = ['111', '222', '333', '123', '444', '555']
算法应该如何工作:
- 将 myList 中当前项目的每个数字与 myCmpItem 进行比较
- 对于列表中的第一项,它将是这样的:
- 5和1之间的差是4
- 1和1之间的差为0
- 1和1之间的差为0
- 这两个数字之间的差是 4(数字比较的总和)
- 对所有其他项目执行相同操作
- 按此计算的相似度对列表进行排序
我可以用很多 for 循环对此进行编码,但我实际上正在寻找一种更快的方法来做到这一点。有没有类似的算法?快速地?
进一步的限制
- 在我的示例中,所有项目的长度为 3,在实际场景中,它们的长度为 25
- 所有项目的长度相同,len(myList[x])==25 始终为真
- 项目可以是字符串、整数、浮点数或任何更适合算法的东西
- 1到5之间只有数字
背景
所有项目的数字都是问题的答案,我想找到与给定答案集最相似的答案集。所以“123”表示用户回答了问题 1 = 答案 1、问题 2 = 答案 2、问题 3 = 答案 3。它们是多项选择题,共有 25 个问题(= 25 个问题的长度),并且总是有 5 个不同的回答的可能性(这些是数字 1-5)。
PS:这是我在 Stackoverflow 上问的第一个问题,所以请善待我。我已经用谷歌搜索了几个小时,但找不到任何解决方案,所以我在这里问。我希望那很好。另外英语不是我的母语。
答案(感谢所有参与者!)
@larsmans 的回答(https://stackoverflow.com/a/10790714/511484)很好地解释了如何以合理的速度解决这个问题。您甚至可以通过提前计算每个数字之间的距离来加速算法,请参阅@gnibbler 的帖子(https://stackoverflow.com/a/10791838/511484)所有其他答案也很好且正确,但我发现@larsmans 有最好的解释。再次感谢大家的帮助!