list Integer indexing dies??

I

Ishwor

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

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

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

Antoon Pardon

Op 2004-12-23 said:
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.
 
I

Ishwor

Op 2004-12-23 said:
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??
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.
 
A

Antoon Pardon

Op 2004-12-23 said:
Op 2004-12-23 said:
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??

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

Ishwor

Op 2004-12-23 said:
Op 2004-12-23, Ishwor schreef <[email protected]>:
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 125 # nice n good

now it would be nice if integer could also be *subscripted* too
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
3 # my own opinion.
cough up the same as 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.

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. ;-)
 
L

Lonnie Princehouse

;-) gotcha. But shouldn't this be valid too??

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

Stephen Thorne

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
3 # my own opinion.
TypeError: unsubscriptable object
cough up the same as 29[0].
2 #again my own opinion
TypeError: unsubscriptable object


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

Stephen Thorne
 
D

Duncan Booth

Antoon said:
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.
 
M

Mike Meyer

Ishwor said:
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
 
I

Ishwor

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]
 
M

Mike Meyer

Ishwor said:
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
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,743
Messages
2,569,478
Members
44,899
Latest member
RodneyMcAu

Latest Threads

Top