2014-03-25 30 views
0

给定int,str列表的列表,我需要找到一种方法来从高到低排序,而不使用排序。 所以,如果我有:python如何排序int列表的列表str

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

我应该返回的数量这个排序,如果数字是相同的,按字母顺序排列,如:

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

是有办法做到这一点,而无需使用排序函数?

+1

好,你可以使用'sort'到位进行排序,而不是'sorted'返回,而无需修改输入排序列表..但为什么它不管你用什么功能? –

+0

是的,是有办法做到这一点不使用排序功能。 – thefourtheye

+3

你有什么尝试?这些限制表明这是功课,如果你已经分配了此作为家庭作业,你可能已经收到了分配给写一个排序函数。如果是这种情况,向我们展示您所写的类型会很有帮助。 – user2357112

回答

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']] 
+0

你能解释这种代码'键=拉姆达X:(-x [0],X [1])',我不理解。 – BlackMamba

+0

@BlackMamba它是一个比较关键字,它表示:让我们对项目进行排序,就好像它们是元组一样,颠倒了第一个元素比较的顺序并保留了第二个元素比较的顺序。这是方便,因为元组会首先通过他们的第一个元素由第二个元素进行排序,在平局的情况下,等 –