python字符串比较列表中的问题

时间:2015-11-20 05:54:08

标签: python

我想重新排序列表中的数字成员(列表仅包含数字),如果字符串形式为num1 +字符串形式的num2> =字符串形式的num2 +字符串形式的num1,则num1应该超前num2(我无法直接比较数字,因为数字可能非常大,或者数字的连接字符串格式可能非常大并且溢出)。这是一个例子,

num1 = 3
num2 = 30

因为num1 + num2> num2 + num1#'330'> '303'

所以,3应该超过30

另一个例子,输入是[3,30,34,5,9],预期输出是[9,5,34,3,30],并想知道如何优雅地编写Python代码?我们可以为Python列表编写一个自定义的cmp方法吗?

看来这种方法不起作用?排序后的步骤,l仍然与原始值相同?

def cmp_values(v1, v2):
    _v1 = int('{0}{1}'.format(v1, v2))
    _v2 = int('{0}{1}'.format(v2, v1))
    return cmp(_v2, _v1)

if __name__ == "__main__":

    l = [3, 30, 34, 5, 9]
    sorted(l, cmp=cmp_values)
    print l
提前谢谢, 林

3 个答案:

答案 0 :(得分:2)

您可以使用自定义cmp方法对列表进行排序:

def cmp_values(v1, v2):
    _v1 = int('{0}{1}'.format(v1, v2))
    _v2 = int('{0}{1}'.format(v2, v1))
    return cmp(_v2, _v1)

然后用它来对列表进行排序

In [5]: l = [3, 30, 34, 5, 9]
In [6]: sorted(l, cmp=cmp_values)
Out[6]: [9, 5, 34, 3, 30]

你确实需要处理溢出问题。如果v1和v2的组合超过int范围。

根据@LinMa的进一步评论

使用sorted不会更改原始列表,因此您需要将返回的列表分配给新变量:

new_list = sorted(l, cmp=cmp_values)

答案 1 :(得分:1)

你的问题很模糊......

下次,请务必使用适当的缩进格式正确设置代码格式(点击“撤消”箭头下方的if(!isset($_SESSION['not_unique'])) { $_SESSION['not_unique'] = 1; $old_views = get_post_meta( $post_id, $meta_key, true ); $new_views = absint( $old_views ) + 1; update_post_meta( $post_id, $meta_key, $new_views, $old_views ); } 即可找到。

在整理列表时,只需使用Code函数,如下所示:

.sort()

这应该返回:

new_list = [3,6,1,2,4,5]

new_list.sort()

print(new_list)

这是如何对其进行排序的最简单的解释。希望这有点帮助。

答案 2 :(得分:1)

与AKS相同的想法。更长的代码,但可能很容易遵循步骤。

list = [3, 30, 34, 5, 9, 8]

job_done = False
while(job_done == False):
    job_done = True
    for i in range(len(list) - 1):
        as_is = int('{0}{1}'.format(list[i], list[i + 1]))
        swaped = int('{0}{1}'.format(list[i + 1], list[i]))
        if as_is < swaped:
            tmp = list[i]
            list[i] = list[i + 1]
            list[i + 1] = tmp
            job_done = False
print list