list Integer indexing dies??

Discussion in 'Python' started by Ishwor, Dec 23, 2004.

  1. Ishwor

    Ishwor Guest

    Hi all. Look at this snippet of code.

    >>> l = ['a','b','c','d']
    >>> l

    ['a', 'b', 'c', 'd']
    >>> l[0][0][0]

    'a'
    It prints the value 'a'. Fine so far :)
    l[0] ---> 'a' .
    l[0][0]---> 'a'[0] --> 'a'.
    l[0][0][0] ---> 'a'[0][0] --> 'a'[0] --> 'a'

    Now why doesnt this list which holds integer seem to work??

    >>> l = [1,2,3]
    >>> l[0]

    1
    >>> l[0][0]


    Traceback (most recent call last):
    File "<pyshell#244>", line 1, in -toplevel-
    l[0][0]
    TypeError: unsubscriptable object
    >>> l[0]

    1
    >>> 1[0]


    Traceback (most recent call last):
    File "<pyshell#246>", line 1, in -toplevel-
    1[0]
    TypeError: unsubscriptable object
    >>>


    The compiler reports unsubscriptable object ?? confused , dazzled i am ???!!??
    The same list now holds integer instead of strings and l[0][0][0]
    which worked fine earlier on strings doesn't seem to work on
    integers???
    Any help is greatly appreciated.



    --
    cheers,
    Ishwor Gurung
     
    Ishwor, Dec 23, 2004
    #1
    1. Advertising

  2. Op 2004-12-23, Ishwor schreef <>:
    > Hi all. Look at this snippet of code.
    >
    >>>> l = ['a','b','c','d']
    >>>> l

    > ['a', 'b', 'c', 'd']
    >>>> l[0][0][0]

    > 'a'
    > It prints the value 'a'. Fine so far :)
    > l[0] ---> 'a' .
    > l[0][0]---> 'a'[0] --> 'a'.
    > l[0][0][0] ---> 'a'[0][0] --> 'a'[0] --> 'a'
    >
    > Now why doesnt this list which holds integer seem to work??


    Because this only works with strings.

    String is the only object in python which has an implied
    equivallence between an element and a squence of one.

    So one character is a string and a string is a sequence
    of characters.

    So 'a'[0] is again 'a' which can again be indexed by
    0 as many times as you want.


    I think python would have been more consistent if
    strings would have been tuples of chars and maybe
    implied an equivalence between whatever object and
    a singleton of that object.

    --
    Antoon Pardon
     
    Antoon Pardon, Dec 23, 2004
    #2
    1. Advertising

  3. Ishwor

    Ishwor Guest

    On 23 Dec 2004 14:28:37 GMT, Antoon Pardon <> wrote:
    > Op 2004-12-23, Ishwor schreef <>:
    > > Hi all. Look at this snippet of code.
    > >
    > >>>> l = ['a','b','c','d']
    > >>>> l

    > > ['a', 'b', 'c', 'd']
    > >>>> l[0][0][0]

    > > 'a'
    > > It prints the value 'a'. Fine so far :)
    > > l[0] ---> 'a' .
    > > l[0][0]---> 'a'[0] --> 'a'.
    > > l[0][0][0] ---> 'a'[0][0] --> 'a'[0] --> 'a'
    > >
    > > Now why doesnt this list which holds integer seem to work??

    >
    > Because this only works with strings.
    >
    > String is the only object in python which has an implied
    > equivallence between an element and a squence of one.
    >
    > So one character is a string and a string is a sequence
    > of characters.
    >
    > So 'a'[0] is again 'a' which can again be indexed by
    > 0 as many times as you want.


    ;-) gotcha. But shouldn't this be valid too??
    >>> 123232[0]

    in which basically python can infer from the object type and print out
    1 instead of coughing up those errors? My experience as a learner here
    is that there should be some automagics & say like "okay you want to
    do indexing on integers ( context dependent); i'll give you the index
    of 0th position in that integer" ???


    [snip]

    Thanks Antoon.
    --
    cheers,
    Ishwor Gurung
     
    Ishwor, Dec 23, 2004
    #3
  4. Op 2004-12-23, Ishwor schreef <>:
    > On 23 Dec 2004 14:28:37 GMT, Antoon Pardon <> wrote:
    >> Op 2004-12-23, Ishwor schreef <>:
    >> > Hi all. Look at this snippet of code.
    >> >
    >> >>>> l = ['a','b','c','d']
    >> >>>> l
    >> > ['a', 'b', 'c', 'd']
    >> >>>> l[0][0][0]
    >> > 'a'
    >> > It prints the value 'a'. Fine so far :)
    >> > l[0] ---> 'a' .
    >> > l[0][0]---> 'a'[0] --> 'a'.
    >> > l[0][0][0] ---> 'a'[0][0] --> 'a'[0] --> 'a'
    >> >
    >> > Now why doesnt this list which holds integer seem to work??

    >>
    >> Because this only works with strings.
    >>
    >> String is the only object in python which has an implied
    >> equivallence between an element and a squence of one.
    >>
    >> So one character is a string and a string is a sequence
    >> of characters.
    >>
    >> So 'a'[0] is again 'a' which can again be indexed by
    >> 0 as many times as you want.

    >
    > ;-) gotcha. But shouldn't this be valid too??
    >>>> 123232[0]


    Well if it should become valid, it should just return 123232 IMO.

    > in which basically python can infer from the object type and print out
    > 1 instead of coughing up those errors?


    Why do you feel it should cough up 1?

    Suppose I write a number in octal notation.

    What should 035[0] cough up? Be carefull it should
    cough up the same as 29[0].

    > My experience as a learner here
    > is that there should be some automagics & say like "okay you want to
    > do indexing on integers ( context dependent); i'll give you the index
    > of 0th position in that integer" ???


    Integers have no position. The position we think of in integers is an
    artefact of our notational system. Even then if we would simply defer
    to decimal notation there is still a problem. You see there are a
    number of arguments that would make 123232[0] cough up 2. Because
    by starting indexing from the back we get a nice correspondence between
    the index of the number and the power of 10 it represents.

    --
    Antoon Pardon
     
    Antoon Pardon, Dec 23, 2004
    #4
  5. Ishwor

    Ishwor Guest

    On 23 Dec 2004 15:05:20 GMT, Antoon Pardon <> wrote:
    > Op 2004-12-23, Ishwor schreef <>:
    > > On 23 Dec 2004 14:28:37 GMT, Antoon Pardon <> wrote:
    > >> Op 2004-12-23, Ishwor schreef <>:
    > >> > Hi all. Look at this snippet of code.
    > >> >
    > >> >>>> l = ['a','b','c','d']
    > >> >>>> l
    > >> > ['a', 'b', 'c', 'd']
    > >> >>>> l[0][0][0]
    > >> > 'a'
    > >> > It prints the value 'a'. Fine so far :)
    > >> > l[0] ---> 'a' .
    > >> > l[0][0]---> 'a'[0] --> 'a'.
    > >> > l[0][0][0] ---> 'a'[0][0] --> 'a'[0] --> 'a'
    > >> >
    > >> > Now why doesnt this list which holds integer seem to work??
    > >>
    > >> Because this only works with strings.
    > >>
    > >> String is the only object in python which has an implied
    > >> equivallence between an element and a squence of one.
    > >>
    > >> So one character is a string and a string is a sequence
    > >> of characters.
    > >>
    > >> So 'a'[0] is again 'a' which can again be indexed by
    > >> 0 as many times as you want.

    > >
    > > ;-) gotcha. But shouldn't this be valid too??
    > >>>> 123232[0]

    >
    > Well if it should become valid, it should just return 123232 IMO.
    >

    Im not sure i understand u but what i meant was that
    >>> 123 + 2

    125 # nice n good

    now it would be nice if integer could also be *subscripted* too
    >>> 123[0] + 2

    3
    ;-) But as i said in earlier post said, i'll stick with import this's
    #2 by Tim Peters. Its better to leave these design issues with other
    **senior pythoneers**.


    > > in which basically python can infer from the object type and print out
    > > 1 instead of coughing up those errors?

    >
    > Why do you feel it should cough up 1?
    >



    >>>123232[0] #hypothetical 0th position in the integer.

    1


    > Suppose I write a number in octal notation.
    >
    > What should 035[0] cough up? Be carefull it should


    >>>035[0]

    3 # my own opinion.

    > cough up the same as 29[0].


    >>>29[0]

    2 #again my own opinion


    [snip]

    > by starting indexing from the back we get a nice correspondence between
    > the index of the number and the power of 10 it represents.
    >
    > --
    > Antoon Pardon
    > --
    > http://mail.python.org/mailman/listinfo/python-list
    >


    As in my view if python could treat object in context sensitive
    manner, it would be better world but its just my own beginners
    opinion.
    Happy hunting with Python. ;-)

    --
    cheers,
    Ishwor Gurung
     
    Ishwor, Dec 23, 2004
    #5
  6. > ;-) gotcha. But shouldn't this be valid too??
    > >>> 123232[0]


    No, it shouldn't be valid. It makes the implicit assumption that you
    want the base 10 digit, which isn't really a good assumption to make in
    the world of computers. Programmers are just as likely to want
    hexadecimal, and arguments could be made for octal or binary too.
    Basically, there's no intuitive meaning for trying to slice an integer.

    Also, it seems like it would be very rare that anybody would want to do
    this. Most of those cases fall into one of two categories- (1) trying
    to display digits of a number in a human readable way, and (2) trying
    to do some kind of math.

    (1) is better handled by explicitly converting it to a string first,
    and
    (2) is likely better handled using logarithms.
     
    Lonnie Princehouse, Dec 23, 2004
    #6
  7. On Fri, 24 Dec 2004 02:59:40 +1030, Ishwor <> wrote:

    > >>> 123[0] + 2

    > 3

    TypeError: unsubscriptable object

    > > > in which basically python can infer from the object type and print out
    > > > 1 instead of coughing up those errors?

    > >
    > > Why do you feel it should cough up 1?
    > >

    >
    > >>>123232[0] #hypothetical 0th position in the integer.

    > 1

    TypeError: unsubscriptable object

    > > Suppose I write a number in octal notation.
    > >
    > > What should 035[0] cough up? Be carefull it should

    >
    > >>>035[0]

    > 3 # my own opinion.

    TypeError: unsubscriptable object

    > > cough up the same as 29[0].

    >
    > >>>29[0]

    > 2 #again my own opinion

    TypeError: unsubscriptable object


    Just-in-my-own-opinion-ly y'rs

    Stephen Thorne
     
    Stephen Thorne, Dec 23, 2004
    #7
  8. Ishwor

    Duncan Booth Guest

    Antoon Pardon wrote:

    > Suppose I write a number in octal notation.
    >
    > What should 035[0] cough up? Be carefull it should
    > cough up the same as 29[0].
    >


    given that 035==000000000000000000000000000000000000000000000035 I say they
    should both cough up 0 for any positive index of course.
     
    Duncan Booth, Dec 24, 2004
    #8
  9. Ishwor

    Mike Meyer Guest

    Ishwor <> writes:

    > On 23 Dec 2004 14:28:37 GMT, Antoon Pardon <> wrote:
    > My experience as a learner here is that there should be some
    > automagics & say like "okay you want to do indexing on integers (
    > context dependent); i'll give you the index of 0th position in that
    > integer" ???


    Python doesn't do things automagically. The rules for pythonic
    behavior include "Explicit is better than implicit" and "In the face
    of ambiguity, refuse the tempation to guess." Both of those are
    violated by automatic conversions and the like.

    <mike
    --
    Mike Meyer <> http://www.mired.org/home/mwm/
    Independent WWW/Perforce/FreeBSD/Unix consultant, email for more information.
     
    Mike Meyer, Dec 24, 2004
    #9
  10. Ishwor

    Ishwor Guest

    On Fri, 24 Dec 2004 05:44:50 -0600, Mike Meyer <> wrote:
    > Ishwor <> writes:
    >
    > > On 23 Dec 2004 14:28:37 GMT, Antoon Pardon <> wrote:
    > > My experience as a learner here is that there should be some
    > > automagics & say like "okay you want to do indexing on integers (
    > > context dependent); i'll give you the index of 0th position in that
    > > integer" ???

    >
    > Python doesn't do things automagically. The rules for pythonic
    > behavior include "Explicit is better than implicit" and "In the face
    > of ambiguity, refuse the tempation to guess." Both of those are
    > violated by automatic conversions and the like.
    >


    Well *shrugs* that was just an opionion though a bad one from a
    beginner :)... No hard feeling pythoner friends. ;-) and Merry
    Christmas to you all ;-)
    Then gingerbread is ready at
    http://www.mediatinker.com/blog/archives/008798.html
    ;-)

    [snip]

    --
    cheers,
    Ishwor Gurung
     
    Ishwor, Dec 24, 2004
    #10
  11. Ishwor

    Mike Meyer Guest

    Ishwor <> writes:

    > On Fri, 24 Dec 2004 05:44:50 -0600, Mike Meyer <> wrote:
    >> Ishwor <> writes:
    >>
    >> > On 23 Dec 2004 14:28:37 GMT, Antoon Pardon <> wrote:
    >> > My experience as a learner here is that there should be some
    >> > automagics & say like "okay you want to do indexing on integers (
    >> > context dependent); i'll give you the index of 0th position in that
    >> > integer" ???

    >>
    >> Python doesn't do things automagically. The rules for pythonic
    >> behavior include "Explicit is better than implicit" and "In the face
    >> of ambiguity, refuse the tempation to guess." Both of those are
    >> violated by automatic conversions and the like.
    >>

    >
    > Well *shrugs* that was just an opionion though a bad one from a
    > beginner :)... No hard feeling pythoner friends. ;-) and Merry
    > Christmas to you all ;-)
    > Then gingerbread is ready at
    > http://www.mediatinker.com/blog/archives/008798.html


    I'm aware that it was an opinion from a beginner. I thought it was
    worth pointing out *why* this was a bad opinion in Python. I certainly
    didn't intend to offend or insult anyone by doing so.

    <mike
    --
    Mike Meyer <> http://www.mired.org/home/mwm/
    Independent WWW/Perforce/FreeBSD/Unix consultant, email for more information.
     
    Mike Meyer, Dec 24, 2004
    #11
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. C
    Replies:
    0
    Views:
    526
  2. Ishwor
    Replies:
    1
    Views:
    355
    Serhiy Storchaka1745620946
    Dec 23, 2004
  3. Ishwor
    Replies:
    2
    Views:
    277
    Dan Bishop
    Dec 23, 2004
  4. Emin
    Replies:
    4
    Views:
    434
    Paul McGuire
    Jan 12, 2007
  5. Christopher M. Lusardi
    Replies:
    3
    Views:
    217
    Alan J. Flavell
    Oct 19, 2003
Loading...

Share This Page