# List of lists of lists of lists...

Discussion in 'Python' started by =?UTF-8?B?w4FuZ2VsIEd1dGnDqXJyZXogUm9kcsOtZ3Vleg==, May 8, 2006.

1. ### =?UTF-8?B?w4FuZ2VsIEd1dGnDqXJyZXogUm9kcsOtZ3Vleg==Guest

I would like to have a list of lists N times deep, and my solution is (in
pseudocode):

def deep(x):
a=[x]
return a

mylist=[]
for N: mylist=deep(mylist)

Is there a more elegant way to do it?

The maine idea is: from a list having the numbre of steps along N
dimensions, generate a list with an item at each possible point.

Example 1: N=2 list=[2,3] result=[[1,2],[1,2],[1,2]]
Example 2: N=3 list=[3,1,2] result=[[[1,2,3]],[[1,2,3]]]
--
Instituto de Ciencia de los Materiales de Madrid - CSIC
SpLine - European Syncrothorn Radiation Facility - Grenoble - France

Postal adress: Departamento de QuÃ­mica FÃ­sica y AnalÃ­tica
Universidad de Oviedo - c/JuliÃ¡n ClaverÃ­a 8 33006 - Oviedo
Asturias - Spain
E-mail: Telf.: +34-985103687
=?UTF-8?B?w4FuZ2VsIEd1dGnDqXJyZXogUm9kcsOtZ3Vleg==, May 8, 2006

2. ### bruno at modulixGuest

> I would like to have a list of lists N times deep, and my solution is (in
> pseudocode):
>
> def deep(x):
> a=[x]
> return a

Hint : what's exactly the difference between deep(x) and [x] ?

> mylist=[]
> for N: mylist=deep(mylist)
>
> Is there a more elegant way to do it?

for N:
mylist = [mylist]

> The maine idea is: from a list having the numbre of steps along N
> dimensions, generate a list with an item at each possible point.
>
> Example 1: N=2 list=[2,3] result=[[1,2],[1,2],[1,2]]
> Example 2: N=3 list=[3,1,2] result=[[[1,2,3]],[[1,2,3]]]

I'm afraid I don't understand. Could you forgive my stupidity and
re-explain this a bit more clearly ?

--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in ''.split('@')])"
bruno at modulix, May 9, 2006

3. ### James StroudGuest

> I would like to have a list of lists N times deep, and my solution is (in
> pseudocode):
>
> def deep(x):
> a=[x]
> return a
>
> mylist=[]
> for N: mylist=deep(mylist)
>
> Is there a more elegant way to do it?
>
> The maine idea is: from a list having the numbre of steps along N
> dimensions, generate a list with an item at each possible point.
>
> Example 1: N=2 list=[2,3] result=[[1,2],[1,2],[1,2]]
> Example 2: N=3 list=[3,1,2] result=[[[1,2,3]],[[1,2,3]]]

Numarray does this sort of thing, but you have to familiarize yourself
with its indexing conventions:

py> import numarray
py> numarray.ones((3,2))
array([[1, 1],
[1, 1],
[1, 1]])
py> numarray.ones((1,2,3))
array([[[1, 1, 1],
[1, 1, 1]]])

James

--
James Stroud
UCLA-DOE Institute for Genomics and Proteomics
Box 951570
Los Angeles, CA 90095

http://www.jamesstroud.com/
James Stroud, May 10, 2006
4. ### Robert KernGuest

James Stroud wrote:

> Numarray does this sort of thing, but you have to familiarize yourself
> with its indexing conventions:
>
> py> import numarray
> py> numarray.ones((3,2))
> array([[1, 1],
> [1, 1],
> [1, 1]])
> py> numarray.ones((1,2,3))
> array([[[1, 1, 1],
> [1, 1, 1]]])

numpy is the successor to numarray, so if you are just starting with arrays,
please get started with numpy. It should also be noted that numpy can create
arrays of objects as well as arrays of numbers.

In [1]: from numpy import *

In [2]: empty((1,2,3), dtype=object)
Out[2]:
array([[[None, None, None],
[None, None, None]]], dtype=object)

http://numeric.scipy.org

--
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
an underlying truth."
-- Umberto Eco
Robert Kern, May 10, 2006
5. ### =?UTF-8?B?w4FuZ2VsIEd1dGnDqXJyZXogUm9kcsOtZ3Vleg==Guest

bruno at modulix wrote:

> for N:
> mylist = [mylist]
>

Right that!

> I'm afraid I don't understand. Could you forgive my stupidity and
> re-explain this a bit more clearly ?
>

No need to. Former solution worked fine. Thanks!
--
Instituto de Ciencia de los Materiales de Madrid - CSIC
SpLine - European Syncrothorn Radiation Facility - Grenoble - France

Postal adress: Departamento de QuÃ­mica FÃ­sica y AnalÃ­tica
Universidad de Oviedo - c/JuliÃ¡n ClaverÃ­a 8 33006 - Oviedo
Asturias - Spain
E-mail: Telf.: +34-985103687
=?UTF-8?B?w4FuZ2VsIEd1dGnDqXJyZXogUm9kcsOtZ3Vleg==, May 15, 2006
6. ### =?UTF-8?B?w4FuZ2VsIEd1dGnDqXJyZXogUm9kcsOtZ3Vleg==Guest

Robert Kern wrote:
> James Stroud wrote:
> http://numeric.scipy.org
>

Thanks! That's anotehr solution, yes!
--
Instituto de Ciencia de los Materiales de Madrid - CSIC
SpLine - European Syncrothorn Radiation Facility - Grenoble - France

Postal adress: Departamento de QuÃ­mica FÃ­sica y AnalÃ­tica
Universidad de Oviedo - c/JuliÃ¡n ClaverÃ­a 8 33006 - Oviedo
Asturias - Spain
E-mail: Telf.: +34-985103687
=?UTF-8?B?w4FuZ2VsIEd1dGnDqXJyZXogUm9kcsOtZ3Vleg==, May 15, 2006