32 lines
		
	
	
		
			765 B
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			32 lines
		
	
	
		
			765 B
		
	
	
	
		
			Python
		
	
	
	
| builtin_cmp = cmp # need to use cmp as keyword arg
 | |
| 
 | |
| def _sorted(iterable, cmp=None, key=None, reverse=0):
 | |
|     use_cmp = None
 | |
|     if key is not None:
 | |
|         if cmp is None:
 | |
|             def use_cmp(x, y):
 | |
|                 return builtin_cmp(x[0], y[0])
 | |
|         else:
 | |
|             def use_cmp(x, y):
 | |
|                 return cmp(x[0], y[0])
 | |
|         l = [(key(element), element) for element in iterable]
 | |
|     else:
 | |
|         if cmp is not None:
 | |
|             use_cmp = cmp
 | |
|         l = list(iterable)
 | |
|     #print l
 | |
|     if use_cmp is not None:
 | |
|         l.sort(use_cmp)
 | |
|     else:
 | |
|         l.sort()
 | |
|     if reverse:
 | |
|         l.reverse()
 | |
|     if key is not None:
 | |
|         return [element for (_, element) in l]
 | |
|     return l
 | |
| 
 | |
| try:
 | |
|     sorted = sorted
 | |
| except NameError:
 | |
|     sorted = _sorted
 |