Python上的性能问题

时间:2015-10-06 15:59:33

标签: python performance iteration

我在Python上遇到了性能问题。下面的代码片段有4个嵌套循环遍历OrderedDict, matrix_col ,其中包含11000个项目。另一个迭代超过了一个默认指令 trans ,其中还包含约11000个项目。执行此过程需要太长时间。如果有人可以建议如何提高性能,我感激不尽。

0 Tue Oct  6 11:31:18 2015
1 Tue Oct  6 11:31:46 2015
2 Tue Oct  6 11:32:19 2015
3 Tue Oct  6 11:32:52 2015
4 Tue Oct  6 11:33:19 2015
5 Tue Oct  6 11:33:46 2015

这是它目前的表现。它基本上每分钟处理2个项目。使用此速度,形成矩阵需要5天以上, trans_mat

var dataObject = {
    'FirstName': $('#FirstName').val(),
    'LastName': $('#LastName').val()
};

$.ajax({
    type: 'POST',
    url: '@Url.Action("Submit", "Home")',
    contentType: 'application/json;',
    dataType: 'json',
    data: dataObject,
    success: function (result) {
        debugger;
        alert('Success');
    },
    error: function (response) {
        debugger;
        alert('Error');
    }
});

2 个答案:

答案 0 :(得分:2)

您没有利用字典可用的快速查找功能。在字典中找到一个键是O(1)。要解决此问题,您只需更改算法,这样就不会迭代所有键来寻找您想要的那些。

from itertools import product
trans_mat = [ [trans[u1][u2]] if (u1 in trans) and (u2 in trans[u1]) else [0]
                 for u1 in matrix_col for u2 in matrix_col ]

答案 1 :(得分:1)

如果没有上下文,您很难理解逻辑以及您想要实现的目标,但您应该考虑更改算法以首先迭代trans,然后检查trans_mat。类似的东西:

for w1, t_val in trans.items():
    w1_is_in_matrix_col = str(w1) in matrix_col
    for w2, c in t_val.items():
        if w1_is_in_matrix_col and str(w2) in matrix_col:
            trans_mat.append([c])
        else:
            trans_mat.append([0])

从理论上讲,你可以在这里使用列表理解,这也会给你一些提升(但与当前的低效率相比较小)。