[Python-ideas] Vectorization [was Re: Add list.join() please]

David Mertz mertz at gnosis.cx
Sat Feb 2 20:54:12 EST 2019


Here is a very toy proof-of-concept:

>>> from vector import Vector
>>> l = "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split()
>>> v = Vector(l)
>>> v
<Vector of ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
'Oct', 'Nov', 'Dec']>
>>> v.strip().lower().replace('a','X')
<Vector of ['jXn', 'feb', 'mXr', 'Xpr', 'mXy', 'jun', 'jul', 'Xug', 'sep',
'oct', 'nov', 'dec']>
>>> vt = Vector(tuple(l))
>>> vt
<Vector of ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
'Oct', 'Nov', 'Dec')>
>>> vt.lower().replace('o','X')
<Vector of ('jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep',
'Xct', 'nXv', 'dec')>


My few lines are at https://github.com/DavidMertz/stringpy

One thing I think I'd like to be different is to have some way of accessing
EITHER the collection being held OR each element.  So now I just get:

>>> v.__len__()
<Vector of [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]>


Yes, that's an ugly spelling of `len(v)`, but let's bracket that for the
moment.  It would be nice also to be able to ask "what's the length of the
vector, in a non-vectorized way" (i.e. 12 in this case).  Maybe some naming
convention like:

>>> v.collection__len__()
12


This last is just a possible behavior, not in the code I just uploaded.


On Sat, Feb 2, 2019 at 6:47 PM Chris Angelico <rosuav at gmail.com> wrote:

> On Sun, Feb 3, 2019 at 10:36 AM Ben Rudiak-Gould <benrudiak at gmail.com>
> wrote:
> >
> > On Sat, Feb 2, 2019 at 3:23 PM Christopher Barker <pythonchb at gmail.com>
> wrote:
> >>
> >> a_list_of_strings.strip().lower().title()
> >>
> >> is a lot nicer than:
> >>
> >> [s.title() for s in (s.lower() for s in [s.strip(s) for s in
> a_list_of_strings])]
> >>
> >> or
> >>
> >> list(map(str.title, (map(str.lower, (map(str.strip,
> a_list_of_strings)))) # untested
> >
> > In this case you can write
> >
> >     [s.strip().lower().title() for s in a_list_of_strings]
>
> What if it's a more complicated example?
>
> len(sorted(a_list_of_strings.casefold())[:100])
>
> where the len() is supposed to give back a list of the lengths of the
> first hundred strings, sorted case insensitively? (Okay so it's a
> horrible contrived example. Bear with me.)
>
> With current syntax, this would need multiple map calls or comprehensions:
>
> [len(s) for s in sorted(s.casefold() for s in a_list_of_strings)[:100]]
>
> (Better examples welcomed.)
>
> ChrisA
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/
>


-- 
Keeping medicines from the bloodstreams of the sick; food
from the bellies of the hungry; books from the hands of the
uneducated; technology from the underdeveloped; and putting
advocates of freedom in prisons.  Intellectual property is
to the 21st century what the slave trade was to the 16th.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20190202/a327587a/attachment.html>


More information about the Python-ideas mailing list