For Py2.4, I propose adding an optional list.sort() argument to support the decorate-sort-undecorate pattern. The current, pure Python approach to DSU is pure arcana. It is obscure enough and cumbersome enough that cmpfunc() tends to get used instead. Built-in C support for DSU requires much less skill to use, results in more readable code, and runs faster. Raymond Hettinger ------ Concept demonstraton ------------------ def sort(self, cmpfunc=None, decorator=None): """Show how list.sort() could support a decorating function""" args = () if cmpfunc is not None: args = (cmpfunc,) if decorator is None: self.sort(*args) else: aux = zip(map(decorator, self), self) # Decorate aux.sort(*args) self[:] = list(zip(*aux)[1]) # Un-decorate a = 'the Quick brown Fox jumped Over the Lazy Dog'.split() sort(a) # the no argument form is unchanged print a, 'Normal sort' sort(a, lambda x,y: -cmp(x,y)) # old code still works without change print a, 'Reverse sort' sort(a, decorator=str.lower) # the new way is fast, clean, and readable print a, 'Lowercase sort' # The decorator form works especially well with mappings so that database # keys can be sorted by any field. ages = dict(john=5, amy=3, andrea=32, henry=12) names = ages.keys() location = dict(john='alaska', amy='spain', andrea='peru', henry='iowa') sort(names) print names, '<-- by name' sort(names, decorator=ages.__getitem__) print names, '<-- by age' sort(names, decorator=location.__getitem__) print names, '<-- by location' -------------- next part -------------- An HTML attachment was scrubbed... URL: http://mail.python.org/pipermail/python-dev/attachments/20031013/a4413f54/attachment.html
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4