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

MRAB python at mrabarnett.plus.com
Sat Feb 2 21:59:36 EST 2019


On 2019-02-03 01:54, David Mertz wrote:
> 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.
> 
Perhaps a reserved attribute that let's you refer to the vector itself 
instead of its members, e.g. '.self'?

>>> len(v)
<Vector of [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]>
 >>> len(v.self)
12

 >>> v[1 : ]
<Vector of ['an', 'eb', 'ar', 'pr', 'ay', 'un', 'ul', 'ug', 'ep', 'ct', 
'ov', 'ec']>
 >>> v.self[1 : ]
<Vector of ['Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 
'Oct', 'Nov', 'Dec']>

> 
> On Sat, Feb 2, 2019 at 6:47 PM Chris Angelico <rosuav at gmail.com 
> <mailto:rosuav at gmail.com>> wrote:
> 
>     On Sun, Feb 3, 2019 at 10:36 AM Ben Rudiak-Gould
>     <benrudiak at gmail.com <mailto:benrudiak at gmail.com>> wrote:
>      >
>      > On Sat, Feb 2, 2019 at 3:23 PM Christopher Barker
>     <pythonchb at gmail.com <mailto: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.)
> 


More information about the Python-ideas mailing list