72 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
try:
 | 
						|
    reversed = reversed
 | 
						|
except NameError:
 | 
						|
    def reversed(sequence):
 | 
						|
        """reversed(sequence) -> reverse iterator over values of the sequence
 | 
						|
 | 
						|
        Return a reverse iterator
 | 
						|
        """
 | 
						|
        if hasattr(sequence, '__reversed__'):
 | 
						|
            return sequence.__reversed__()
 | 
						|
        if not hasattr(sequence, '__getitem__'):
 | 
						|
            raise TypeError("argument to reversed() must be a sequence")
 | 
						|
        return reversed_iterator(sequence)
 | 
						|
 | 
						|
    class reversed_iterator(object):
 | 
						|
 | 
						|
        def __init__(self, seq):
 | 
						|
            self.seq = seq
 | 
						|
            self.remaining = len(seq)
 | 
						|
 | 
						|
        def __iter__(self):
 | 
						|
            return self
 | 
						|
 | 
						|
        def next(self):
 | 
						|
            i = self.remaining
 | 
						|
            if i > 0:
 | 
						|
                i -= 1
 | 
						|
                item = self.seq[i]
 | 
						|
                self.remaining = i
 | 
						|
                return item
 | 
						|
            raise StopIteration
 | 
						|
 | 
						|
        def __length_hint__(self):
 | 
						|
            return self.remaining
 | 
						|
 | 
						|
try:
 | 
						|
    sorted = sorted
 | 
						|
except NameError:
 | 
						|
    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)
 | 
						|
        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:
 | 
						|
    set, frozenset = set, frozenset
 | 
						|
except NameError:
 | 
						|
    from sets import set, frozenset 
 | 
						|
 | 
						|
# pass through
 | 
						|
enumerate = enumerate 
 |