Como iniciar una cadena o matriz?

Francesc Alted falted en openlc.org
Mar Dic 2 19:11:34 CET 2003


A Dimarts 02 Desembre 2003 16:55, Yago Rosselló va escriure:
> Un saludo a todo el mundo,
>
> Me estoy iniciando un poco en el mundo de la programación y escogí python
> por su claridad y elegancia en el lenguaje.
>
> De todas maneras me he encontrado un problema al que no he visto ninguna
> referencia:
> Como se puede definir una cadena, sin darle valores a sus componentes. Es
> decir, si yo tengo una variable que quiero que me determine la longitud de
> una cadena que quiero generar, como puedo definirla y después ir
> modificando sus componentes?

Cadena? quieres decir cadenas de caracteres? una de las gracias de Python es
que soporta tipos dinámicos. No sé bien para que lo quieres, pero si tu
necesidad es real, puedes usar el paquete numarray:

>>> from numarray import strings
>>> a=strings.array(None, itemsize=3, shape=(2,))
>>> a
CharArray([' ', ' '])
>>> a[0]="sdsss";a[1]="abc"
>>> a
CharArray(['sds', 'abc'])

Como ves, he definido un objecto (CharArray) con dos componentes, cada uno
de ellos un string de longitud máxima 3. Después puedes hacer asignaciones a
cada uno de los elementos y si la cadena que intentas asignar ("sdsss") es
mayor que 3, simplemente la corta.

> Pueden estos componentes ser de diferentes tipos en la misma cadena?

Mmm de esto deduzco que lo que a lo mejor buscas son arrays (aunque en
castellano lo mismo se llaman cadenas y no lo sé ;-). En este caso, numarray
te permite hacer lo que quieres para objectos homogéneos, y si prefieres
inhomogéneos también. Ejemplos de objectos homegéneos:

>>> from numarray import *
>>> a=zeros(shape=(3,4), type=Int64)
>>> a[0,0] = 1;a[2,3] = 3
>>> a
array([[1, 0, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 3]], type=Int64)


y de inhomogéneos:

>>> from numarray import objects
>>> a=objects.array(None, shape=(2,))
>>> a[0] = "sdss"; a[1] = (1,2,3)
>>> a
ObjectArray(['sdss', (1, 2, 3)])

pero si intentas asignar a un indice que no existe:

>>> a[3] = "dsd"
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
IndexError: Index out of range

que debe ser lo que tú quieres, más o menos...

Salutacions,

-- 
Francesc Alted




Más información sobre la lista de distribución Python-es