【问题标题】:Python Calculations, using tuples, lists. Python 2.7Python 计算,使用元组、列表。蟒蛇 2.7
【发布时间】:2012-04-12 14:35:20
【问题描述】:

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

[('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,然后将其添加到相似度分数列表中。我的问题是我不知道如何将评分列表的所有元素乘以输入用户的评分列表。所以我基本上需要提示输入用户名,然后将所有其他用户的评分乘以所选用户并输出最高相似度分数。感谢任何帮助,因为我陷入了困境,在此先感谢。

【问题讨论】:

    标签: python list tuples multiplication


    【解决方案1】:

    您可以使用 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}
    

    (后面的代码 sn-p 只适用于 Python 2.7 或 3.x。)

    【讨论】:

    • 当我尝试执行这两个解决方案中的一个或两个时,我收到一个错误:未定义全局名称“操作员”。
    • @MichaelLatimer:你必须import operator 才能使用它。
    • @MichaelLatimer:您需要一些 Python 的基本知识才能利用这里的答案——考虑完成 Python 教程。
    • 好吧,我想通了,猜想应该很明显,呵呵。我怎样才能将 Name1(名称输入)与整个名称列表进行比较?
    • @MichaelLatimer:不知道将名称与名称列表进行比较意味着什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 2019-07-28
    • 2016-10-17
    • 1970-01-01
    • 2020-06-05
    相关资源
    最近更新 更多