在python中使用大型数组

时间:2013-11-04 14:01:37

标签: python arrays

我有三个数组,如下所示:

  1. users - 包含50000个用户的ID(全部不同)
  2. pusers - 包含拥有某些帖子的用户的ID(包含重复的ID,也就是说,一个用户可以拥有多个帖子)[50000值]
  3. score - 包含与pusers中每个值对应的分数。[50000 values]
  4. 现在我想基于以下计算填充另一个数组PScore。对于userspusers的每个值,我需要获取相应的score并将其添加到与PScore对应的索引中的user数组中。

    实施例,

    if users[5] = 23224
    and pusers[6] = pusers[97] = 23224 
    then PScore[5] += score[6]+score[97]
    

    注意事项:

    • scorepusers相关(例如,pusers[5]score[5]
    • PScore预计会与users相关(例如users[5]的累积得分为Pscore[5]
    • 最终目标是为拥有该帖子的用户分配一个累积的帖子分数。
    • 不拥有任何帖子的用户被分配score 0。

    任何人都可以帮我这样做吗?我尝试了很多但是一旦我运行了不同的试验,输出屏幕仍然是空白的,直到我Ctrl+Z并离开。

    我浏览了以下所有帖子,但我无法有效地使用它们。

    我是这个论坛的新手,我也是Python的初学者。任何帮助对我都非常有用。

    其他信息

    • 我正在使用StackOverflow数据开展一个小项目。
    • 我正在使用Orange工具,我正在学习工具和python。

    好的,我知道我的方法有问题。那么我不应该在这种情况下使用列表吗?任何人都可以告诉我应该如何处理这个问题?

    我到达的数据样本如下所示。

    PUsers  Score
    -1  0
    -1  0
    -1  0
    -1  0
    -1  0
    -1  0
    -1  0
    -1  0
    -1  0
    -1  0
    -1  0
    -1  0
    -1  0
    -1  0
    -1  0
    -1  0
    -1  0
    -1  0
    -1  0
    -1  0
    -1  0
    -1  0
    13  0
    77  1
    77  4
    77  3
    77  0
    77  2
    77  2
    77  3
    102     2
    105     0
    108     2
    108     2
    117     2
    
    Users
    -1
    1
    2
    3
    4
    5
    8
    9
    10
    11
    13
    16
    17
    19
    20
    22
    23
    24
    25
    26
    27
    29
    30
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    48
    49
    50
    

    我想要的只是与每个用户相关的总分。 pusers列表再次包含重复,而用户列表包含唯一值。我需要以这样的方式存储与每个用户相关联的总得分,如果我说PScore[6],则应该引用与User[6]相关联的总得分。

    希望我回答了问题。

    提前致谢。

2 个答案:

答案 0 :(得分:2)

从你描述数组的方式开始,既然你正在使用python,这看起来就像是词典的完美候选者。

您应该能够创建一个将用户ID映射到分数的字典,而不是为帖子所有者设置一个数组,为帖子分数设置另一个数组。当您接收数据时,请查看字典以查看用户是否已存在。如果是,请将分数添加到当前分数。如果没有,请创建一个新条目。当您循环浏览所有数据时,您应该有一个从用户ID映射到总分的字典。

http://docs.python.org/2/tutorial/datastructures.html#dictionaries

答案 1 :(得分:1)

我认为你的算法错误或坏了。 尝试计算它的复杂性。如果它是N^2或更多,您可能使用效率低下的算法。具有50.000个元素的O(N^2)应该需要几秒钟。 O(N^3)可能需要几分钟。 如果您确定自己的方法,请尝试使用一些小的假数据运行它,以确定它是否做正确的事情,或者您是否意外添加了一些无限循环。

您可以使用词典轻松地在线性时间内使用它。