Python计算,使用元组,列表。 Python 2.7

时间:2012-04-12 14:35:20

标签: python list tuples multiplying

好的,开始吧。我有一个元组列表,其中包含一个用户,然后是他们的图书评级列表作为第二项。例如:

[('Ben', [5, 0, 0, 0, 0, 0, 0, 1, 0, 1, -3, 5, 0, 0, 0, 5, 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 1, 0, -5, 0, 0, 5, 5, 0, 5, 5, 5, 0, 5, 5, 0, 0, 0, 5, 5, 5, 5, -5]),
('Moose', [5, 5, 0, 0, 0, 0, 3, 0, 0, 1, 0, 5, 3, 0, 5, 0, 3, 3, 5, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 3, 5, 0, 0, 0, 0, 0, 5, -3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 5, 5, 0, 3, 0, 0])]

这只是列表中的前两项内容。好的,所以他们共有86个用户和他们的评级在列表中。我需要弄清楚如何能够将Ben的所有评级乘以Mooses的所有评级,然后将它们全部加在一起。例如,Ben的第一个评级是5,而Moose的第一个评级是5,所以我做5x5,然后将其添加到相似性分数列表中。我的问题是我不知道如何将评级列表的所有元素乘以输入用户的评级列表。所以我基本上需要提示输入用户名然后将所有其他用户评级乘以所选用户并输出最高相似度得分。任何帮助都是值得赞赏的,因为事先感谢我陷入了困境。

1 个答案:

答案 0 :(得分:4)

您可以使用NumPy,但纯Python解决方案也很简单:

d = dict(my_list)
sum(map(operator.mul, d["Ben"], d["Moose"]))

第一行与问题无关 - 它只是将您的元组列表转换为更合适的字典。

要获得完整的相似性矩阵,您可以使用

{name1: {name2: sum(map(operator.mul, d[name1], d[name2])) for name2 in d}
         for name1 in d}

(后面的代码片段仅适用于Python 2.7或3.x.)