Hi,

I'm not sure to understand the real purpose of Vector.

Is that a new collection ?

Is that a list with a builtin map() function ?

Is it a  wrapper to other types ?

Should it be iterable ?


The clear need explained before is using fluent interface on a collection :

MyVector.strip().replace("A","E")

Why do we need Vector to behave like list. We just want to work on our strings but with a cleaner/shorter/nicer syntax.

My idea (not totally clear in my mind) is that Vector should behave quite like the type it wraps so having only one type.

I don't want a collection of strings, I want a MegaString (...) which I can use exactly like alone string.

An iteration on Vector would iter like itertools.chain does.

At the end, I would only need one more method which would return an iterable of the items like MyVector.explode()


For me Vector should be something like that :

class Vector:

    def __init__(self, a_list):
        self.data = a_list
        self._type = type(self.data[0])

        for data in self.data:
            if type(data) != self._type:
                raise TypeError

    def __getattr__(self, name):
        fn =  getattr(self._type, name)

        def wrapped(*args, **kwargs):
            self.data = [fn(i, *args, **kwargs) for i in self.data]
            return self
        return wrapped

    def explode(self):
          return iter(self.data)


I'm not saying it should only handle strings but it seems to be the major use case.

Jimmy


Le 04/02/2019 à 17:12, David Mertz a écrit :
On Mon, Feb 4, 2019 at 7:14 AM Kirill Balunov <kirillbalunov@gmail.com> wrote:
len(v)   # -> 12
v[len]   # -> <Vector of [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]>

In this case you can apply any function, even custom_linked_list from my_inhouse_module.py. 

I think I really like this idea.  Maybe as an extra spelling but still allow .apply() to do the same thing. It feels reasonably intuitive to me. Not *identical to* indexing in NumPy and Pandas, but sort of in the same spirit as predicative or selection based indices.

What do other people on this thread think? Would you learn that easily? Could you teach it?
 
>>> v[1:]  
<Vector of ['Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']>  
>>> v[i[1:]] # some helper class `i`
<Vector of ['an', 'eb', 'ar', 'pr', 'ay', 'un', 'ul', 'ug', 'ep', 'ct', 'ov', 'ec']>  

This feels more forced, unfortunately.  Something short would be good, but not sure I like this.  This is really just a short spelling of pandas.IndexSlice or numpy.s_  It came up in another thread some months ago, but there is another proposal to allow the obvious spelling `slice[start:stop:sep]` as a way of creating slices.

Actually, I guess that's all halfway for the above.  We'd need to do this still:

v[itemgetter(IndexSlicer[1:])]
 
That's way too noisy.  I guess I just don't find the lowercase `i` to be iconic enough.  I think with a better SHORT name, I'd like:

v[Item[1:]]

 Maybe that's not the name?

--
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.


_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/


Le 04/02/2019 à 17:12, David Mertz a écrit :
On Mon, Feb 4, 2019 at 7:14 AM Kirill Balunov <kirillbalunov@gmail.com> wrote:
len(v)   # -> 12
v[len]   # -> <Vector of [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]>

In this case you can apply any function, even custom_linked_list from my_inhouse_module.py. 

I think I really like this idea.  Maybe as an extra spelling but still allow .apply() to do the same thing. It feels reasonably intuitive to me. Not *identical to* indexing in NumPy and Pandas, but sort of in the same spirit as predicative or selection based indices.

What do other people on this thread think? Would you learn that easily? Could you teach it?
 
>>> v[1:]  
<Vector of ['Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']>  
>>> v[i[1:]] # some helper class `i`
<Vector of ['an', 'eb', 'ar', 'pr', 'ay', 'un', 'ul', 'ug', 'ep', 'ct', 'ov', 'ec']>  

This feels more forced, unfortunately.  Something short would be good, but not sure I like this.  This is really just a short spelling of pandas.IndexSlice or numpy.s_  It came up in another thread some months ago, but there is another proposal to allow the obvious spelling `slice[start:stop:sep]` as a way of creating slices.

Actually, I guess that's all halfway for the above.  We'd need to do this still:

v[itemgetter(IndexSlicer[1:])]
 
That's way too noisy.  I guess I just don't find the lowercase `i` to be iconic enough.  I think with a better SHORT name, I'd like:

v[Item[1:]]

 Maybe that's not the name?

--
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.


_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/