How to display name of elements in list?

C

cz

Hi there,

I'm sure there is a very simple solution for my question, I just didn't
find it up to now.
I'm using a badly documented module and therefore need to find out
about how to access the elements in a list.
(I need to do this in Python 1.5.3)
Any help appreciated very much. Thanks!

cz
 
A

Ant

I'm using a badly documented module and therefore need to find out
about how to access the elements in a list.
(I need to do this in Python 1.5.3)

I presume this is the same in 1.5 use dir():
['F_OK', 'O_APPEND', 'O_BINARY', 'O_CREAT', 'O_EXCL', 'O_NOINHERIT',
'O_RANDOM',
'O_RDONLY', 'O_RDWR', 'O_SEQUENTIAL', 'O_SHORT_LIVED', 'O_TEMPORARY',
'O_TEXT',

(etc)
 
S

Steven D'Aprano

Hi there,

I'm sure there is a very simple solution for my question, I just didn't
find it up to now.
I'm using a badly documented module and therefore need to find out
about how to access the elements in a list.

Er, the same way you would access the elements in any other list?

mylist[0]
mylist[1:5]

etc.


Perhaps you need to rephrase your question.
 
C

cz

Perhaps you need to rephrase your question.

Thanks for your reply.
OK, I'll try to make this more clear:
My list called "elten" looks like that:

[Tensor: id = 1, intensity = 2976.52
xx = -1447.32, xy = 52.458, xz = -594.186
yy = -1090.54, yz = -0.0158068, zz = -4043.
, Tensor: id = 26, intensity = 2896.9
...
, Tensor: id = 5, intensity = 2920.5
xx = -1534.53, xy = 23.4858, xz = -623.967
yy = -1070.47, yz = 99.6301, zz = -3979.87
]

Now with
I will get "1" as an answer.
Or with
print elten[1].intensity
it will print "2976.52".
But this doesn't work for >>print elten[1].xx, why? So that's how I
came to the question how to access these values. Any idea?
Thanks a lot!
cz
 
S

Stefan Behnel

Hi Claudio,
Perhaps you need to rephrase your question.

Thanks for your reply.
OK, I'll try to make this more clear:
My list called "elten" looks like that:

[Tensor: id = 1, intensity = 2976.52
xx = -1447.32, xy = 52.458, xz = -594.186
yy = -1090.54, yz = -0.0158068, zz = -4043.
, Tensor: id = 26, intensity = 2896.9
...
, Tensor: id = 5, intensity = 2920.5
xx = -1534.53, xy = 23.4858, xz = -623.967
yy = -1070.47, yz = 99.6301, zz = -3979.87
]

Now with
I will get "1" as an answer.
Or with
print elten[1].intensity
it will print "2976.52".
But this doesn't work for >>print elten[1].xx, why? So that's how I
came to the question how to access these values. Any idea?

The list above is not a valid Python list. What is it that you store in that list?

Or is it maybe a dictionary?

Stefan
 
C

cz

The list above is not a valid Python list. What is it that you store in that list?
Or is it maybe a dictionary?

Stefan

Thanks for your help. How can I find out about what this is? As I said
it's generated by a insufficiently documented module. So if this is a
user defined datatype, is there still a possibility to find the name of
the data fields storing the xx, xy, ... ?
Thanks.
 
M

Magnus Lycka

My list called "elten" looks like that:
[Tensor: id = 1, intensity = 2976.52
xx = -1447.32, xy = 52.458, xz = -594.186
yy = -1090.54, yz = -0.0158068, zz = -4043.
, Tensor: id = 26, intensity = 2896.9
...
, Tensor: id = 5, intensity = 2920.5
xx = -1534.53, xy = 23.4858, xz = -623.967
yy = -1070.47, yz = 99.6301, zz = -3979.87
]
The list above is not a valid Python list. What is it that you store in that list?

It might well be a normal Python list.

The question is what type the items in the list are...
The result of printing a list L is basically a string you
could make like this:

'[' + ','.join(map(repr,L)) + ']'

It seems the elements in this list appear as something
like this when you apply the repr() function on them:

Tensor: id = 1, intensity = 2976.52
xx = -1447.32, xy = 52.458, xz = -594.186
yy = -1090.54, yz = -0.0158068, zz = -4043.

So, the issue is not how you work with a list,
but how you work with the elements of this type.

To reduce the problem to that, you can assign the
first element in the list to a variable.

elem0 = elten[0]

Then you can inspect that in isolation, without
the confusion of the list.

type(elem0)
dir(elem0)
etc...
 
D

Diez B. Roggisch

cz said:
Thanks for your help. How can I find out about what this is? As I said
it's generated by a insufficiently documented module. So if this is a
user defined datatype, is there still a possibility to find the name of
the data fields storing the xx, xy, ... ?

I guess the objects stored in the list have a __repr__-method overloaded
that produces the text you see.

What you should do is to install rlcompleter2, fire up a python prompt and
write code that produces a list of your objects. Then you can play around
with the objects and utilize the reflection capabilities of python, which
are conveniently exposed using rlcompleter2.

Another option is to look into the source of that module and identify the
objects created. Documentation is overrated - use the source, Luke!

Diez
 
S

Stefan Behnel

cz said:
Thanks for your help. How can I find out about what this is? As I said
it's generated by a insufficiently documented module. So if this is a
user defined datatype, is there still a possibility to find the name of
the data fields storing the xx, xy, ... ?

Maybe you should read a bit about Python classes and built-in functions like
"dir()", "type()", "vars()", ...

http://docs.python.org/tut/node8.html#SECTION008300000000000000000
http://docs.python.org/tut/node11.html
http://docs.python.org/lib/built-in-funcs.html

Just start an interactive Python session and play with the object you are
trying to explore. That should get you going.

Stefan
 
F

Fredrik Lundh

Stefan said:
The list above is not a valid Python list.

there's no Python 1.5.3 either. maybe he's posting from a parallel,
slightly different universe ?

</F>
 
T

Tal Einat

Diez B. Roggisch said:
What you should do is to install rlcompleter2... [snip]

Another option is to look into the source of that module and identify the
objects created. Documentation is overrated - use the source, Luke!

rlcompleter is overrated, and only works on Unix/Linux/etc.

IDLE's interpreter has an auto-completion extension, which is bundled in
Python2.5.

You can also get a much better version of IDLE which includes a more robust
version of the completion extension from Idle-Spoon:
http://idlespoon.python-hosting.com/

Just start an interactive Python session and play with the object you are
trying to explore. That should get you going.

+1
Python is fun - just open an interpreter and play around!


- Tal
 
D

Diez B. Roggisch

rlcompleter is overrated, and only works on Unix/Linux/etc.
IDLE's interpreter has an auto-completion extension, which is bundled in
Python2.5.

I don't use idle, and don't want to. So for me rlcomlpeter2 is a good thing.
And under windows, it at least works under cygwin.

Diez
 
C

cz

It looks like the PyTensor object *should* have .xx, .xy, etc
properties, but they may be accessible through a matrix, i.e. .t(i,j)


Thanks to all of you for your help!
The solution is easy: The tensor components have labels t11, t12,...
Good guess ruibalp!
 

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,766
Messages
2,569,569
Members
45,042
Latest member
icassiem

Latest Threads

Top