copysort patch, was RE: [Python-Dev] inline sort option

Dan Aloni da-x at gmx.net
Sat Oct 18 16:54:41 EDT 2003

```On Sat, Oct 18, 2003 at 10:01:52PM +0200, Alex Martelli wrote:
>
> > >>> (lambda x:(x, x.sort())[0])(list(a))
>
> This one can, because the lambda lets you give a temporary name x
> to the otherwise-unnamed list returned by D.keys().  It can be made a
> _little_ better, too, I think:
>
> >>> D=dict.fromkeys('ciao')
> >>> D.keys()
> ['i', 'a', 'c', 'o']
> >>> (lambda x: x.sort() or x)(D.keys())
> ['a', 'c', 'i', 'o']
>
> and if you want it reversed after sorting,
>
> >>> (lambda x: x.sort() or x.reverse() or x)(D.keys())
> ['o', 'i', 'c', 'a']

Good, so this way the difference between copied and not
copied is minimized:

>>> (lambda x: x.sort() or x)(a)

And:

>>> (lambda x: x.sort() or x)(list(a))

Nice, this lambda hack is a cleaner, more specific, and simple
deviation of the chain() function.

Perhaps it could be made more understandable like:

>>> sorted = lambda x: x.sort() or x
>>> sorted(list(a))
['a', 'c', 'i', 'o']

And:

>>> sorted(a)
['a', 'c', 'i', 'o']

The only problem is that you assume .sort() always returns a non
True value. If some time in the future .sort() would return self,
your code would break and then the rightful usage would be:

>>> a = ['c', 'i', 'a', 'o']
>>> list(a).sort()
['a', 'c', 'i', 'o']
>>> a
['c', 'i', 'a', 'o']

And:

>>> a.sort()
['a', 'c', 'i', 'o']
>>> a
['a', 'c', 'i', 'o']

I didn't see the begining of this discussion, but it looks to me that
sort() returning self is much better than adding a .copysort().

> BTW, welcome to python-dev!

Thanks!

--
Dan Aloni
da-x at gmx.net

```