.sort()具有不同大小值的方法

时间:2015-09-14 21:55:51

标签: python sorting python-3.x

我已经找到了一个答案,似乎无法在SO上找到答案(随意证明我的错误),但是这里有。

我有一个不可思议的大型列表(数百万的数值),其中所有数字都在100到1500之间。

如果我们将此列表称为A,那么基本上我就是这样做的:

A= [impossibly large list]
A.sort()

然后发表一项声明,以便了解所有事情的顺序。我期待的顺序是:

A = [151.14, 300, 1501.3]

但我得到的是:

A = [1501.3, 151.14, 300]

它似乎是按第一个数字排序,然后是下一个等等。

任何人都知道这是否是下面的算法固有的,或者这是因为我的列表的大小?

1 个答案:

答案 0 :(得分:5)

您会看到,如果您实际上正在排序字符串,而不是数字。字符串排序为lexicographically,其中'1''20'之前,'A'就像'Bee'之前的>>> A = ['151.14', '300', '1501.3'] >>> A.sort() >>> A ['1501.3', '151.14', '300'] 一样:

A

转换您的'数字'通过替换float中的所有值或使用>>> A.sort(key=float) >>> A ['151.14', '300', '1501.3'] 作为排序键来实际浮点值:

function addForm(btn, prefix) {
    var formCount = parseInt($('#id_' + prefix + '-TOTAL_FORMS').val());

        // Clone a form (without event handlers) from the first form
        var row = $(".item-wrapper:first").clone(false).get(0);
        // Makes a naked copy of them
        $(row).children().find(":input").val('');
        // Inserts into discount and quantity default values
        // Searches for id that contains discount
        $(row).children().find('[id*=discount]').val('0');
        $(row).children().find('[id*=quantity]').val('1.0');
        // Insert it after the last form
        $(row).removeAttr('id').hide().insertAfter(".item-wrapper:last").slideDown(300);

        // Remove the bits we don't want in the new row/form
        // e.g. error messages
        $(".action-warning", row).remove();
        $(row).children().removeClass("error");

        // Relabel or rename all the relevant bits (???????)
        $(row).children().children().children().each(function () {
            updateElementIndex(this, prefix, formCount);
            $(this).val("");
        });

        // Add an event handler for the delete item/form link
        $(row).find("#delete").click(function () {
            return deleteForm(this, prefix);
        });
        // Update the total form count
        $("#id_" + prefix + "-TOTAL_FORMS").val(formCount + 1);

    return false;
}

当然,你可能想问问自己,你是否真的需要你的巨大名单,首先要排序。也许其他结构(树木,堆等)会更好地为你的目标服务?