python如何排序int,str列表的列表

时间:2014-03-25 03:13:40

标签: python

给定一个int,str列表的列表,我需要找到一种从最高到最低排序的方法,而不使用sorted。 如果我有:

list = [[1, 'orange'], [3, 'banana'], [2, 'pear'], [1, 'apple']]

我应该按照数字排序,如果数字相同,则按字母顺序排列,如:

[[3, 'banana'], [2, 'pear'], [1, 'apple'], [1, 'orange']]

有没有办法在不使用排序函数的情况下执行此操作?

1 个答案:

答案 0 :(得分:2)

好吧,你可以使用sort()方法:

lst = [[1, 'orange'], [3, 'banana'], [2, 'pear'], [1, 'apple']]
lst.sort(key=lambda x: (-x[0], x[1]))

lst
=> [[3, 'banana'], [2, 'pear'], [1, 'apple'], [1, 'orange']]

如果 方法也不被允许,你可以用相应的比较器编写自己的排序程序:

def compare(x, y):
    return -cmp(x[0], y[0]) or cmp(x[1], y[1])

def quicksort(lst):
    if not lst:
        return []
    return (quicksort([x for x in lst[1:] if compare(x, lst[0]) <  0])
            + [lst[0]] + 
            quicksort([x for x in lst[1:] if compare(x, lst[0]) >= 0]))

quicksort([[1, 'orange'], [3, 'banana'], [2, 'pear'], [1, 'apple']])
=> [[3, 'banana'], [2, 'pear'], [1, 'apple'], [1, 'orange']]