Python nos permite definir secuencias de valores de cualquier tipo. Por ejemplo, secuencias de números o de símbolos. A esto se le llama lista. La lista viene determinada por una serie de valores encerrados entre corchetes y separados por comas.
In [2]:
    
a =  [2, 3, 4]
    
Los elementos de una lista pueden ser cadenas de caracteres o incluso expresiones que se calculan en tiempo real
In [3]:
    
b = ['hola', 'adios']
    
In [4]:
    
c = [1, 1+3, 6/2]
    
In [5]:
    
c
    
    Out[5]:
Una lista puede no tener elementos: la lista vacía
In [6]:
    
void = []
    
In [7]:
    
void
    
    Out[7]:
In [8]:
    
len(a)
    
    Out[8]:
In [9]:
    
len(void)
    
    Out[9]:
Concatenación: podemos concatenar cadenas con el operador +
In [10]:
    
a = a + b
    
In [11]:
    
a
    
    Out[11]:
Repetición: podemos repetir cadenas con el operador *
In [12]:
    
e = a*2
    
In [13]:
    
e
    
    Out[13]:
Podemos acceder a cada elemento de la lista a través de su índice. Recuerda que los índices siempre empiezan a contar en 0
In [14]:
    
a
    
    Out[14]:
In [15]:
    
a[0]
    
    Out[15]:
In [16]:
    
a[4]
    
    Out[16]:
In [17]:
    
f = [a[0], a[4]]
    
In [18]:
    
f
    
    Out[18]:
Los índices pueden ser negativos.
In [25]:
    
z = range(4,10)
z
    
    Out[25]:
In [26]:
    
z[-1]
    
    Out[26]:
In [27]:
    
z[-6]
    
    Out[27]:
Operador de corte: Podemos quedarnos con un trozo de una lista
In [31]:
    
a = [1, 2, 3, 45, 66]
    
In [32]:
    
b = a[1:4]
b
    
    Out[32]:
In [33]:
    
b = a[1:]
b
    
    Out[33]:
In [34]:
    
b = a[:4]
b
    
    Out[34]:
In [35]:
    
b = a[:]
b
    
    Out[35]:
Podemos utilizar índices negativos
In [36]:
    
c = a[-5:-1]
c
    
    Out[36]:
In [37]:
    
#qué significa esto
b == a
    
    Out[37]:
In [38]:
    
b is a
    
    Out[38]:
El bucle for-in recorre los elementos de una lista.
In [39]:
    
s = ''
for n in a:
    s = s + str(n)
s
    
    Out[39]:
range es un caso particular de lista
In [40]:
    
range(20)
    
    Out[40]:
In [41]:
    
a = a + range(10)
    
In [42]:
    
a
    
    Out[42]:
In [43]:
    
s = ''
for n in a:
    s = s + str(n)
s
    
    Out[43]:
Comparación de listas Las listas se pueden comparar con los operaciones habituales: ==, !=, <=, ...
In [44]:
    
a = [1, 2, 3]
b = [2, 4]
a == b
    
    Out[44]:
In [45]:
    
a != b
    
    Out[45]:
In [46]:
    
a < b
    
    Out[46]:
In [47]:
    
c = a
c
    
    Out[47]:
In [48]:
    
a == c
    
    Out[48]:
In [49]:
    
d = a[:]
    
In [50]:
    
c == d
    
    Out[50]:
In [51]:
    
c is d
    
    Out[51]:
Modificación de elementos de una lista. Mutabilidad. El operador is
In [52]:
    
#Dada una lista, podemos modificar sus componentes
a = range(4,10)
a
    
    Out[52]:
In [53]:
    
a[2] = 99
a
    
    Out[53]:
In [54]:
    
'''
EJEMPLO: Elimina los elementos negativos de una lista, 
sustituyéndolos por 0
'''
b = [1, 3, -4, 5, -2, 3, -9]
for i in range(len(b)):
    if b[i] < 0:
        b[i] = 0
b
    
    Out[54]:
Mutabilidad, inmutabilidad --> de qué me estás hablando?
In [55]:
    
a = range(4,10)
a
    
    Out[55]:
In [57]:
    
b = a
b
    
    Out[57]:
In [58]:
    
a[3] = 99
a
    
    Out[58]:
In [59]:
    
b
    
    Out[59]:
Esto es un poco raro, no?
In [60]:
    
c = a[:]
c
    
    Out[60]:
In [61]:
    
c[3] = 44
c
    
    Out[61]:
In [62]:
    
a
    
    Out[62]:
In [63]:
    
b
    
    Out[63]:
¿Por qué pasa esto?
In [64]:
    
c = a
b = a[:]
    
In [65]:
    
print a == c, a == b
    
    
In [66]:
    
print a is c, a is b
    
    
Las cadenas de caracteres se comportan de forma parecida, pero no igual
In [67]:
    
s = 'hola'
s[0]
    
    Out[67]:
In [68]:
    
s[0] = 'j'
    
    
Podemos añadir elementos a una lista de dos formas diferentes. Una manera es utilizando el operador de concatenación. Esto crea una lista nueva con el nuevo elemento.
In [69]:
    
a = range(4,10)
b = a
    
In [70]:
    
a = a + [99]
print a, b
    
    
In [71]:
    
print a == b, a is b
    
    
También podemos añadir elementos con el método append. De esta forma se modifica la lista original, sin crear una lista nueva.
In [72]:
    
c = b
c
    
    Out[72]:
In [73]:
    
c.append(99)
print c, b
    
    
In [74]:
    
print c == b, c is b
    
    
EJEMPLO: Crea una lista con los cuadrados de los 10 primeros números.
In [76]:
    
L = []
i = 1
while i <= 10:
    L.append(i*i)
    i+=1
L
    
    Out[76]:
In [91]:
    
'''
Si a es una lista de números, escribe un programa 
que modifique la lista de forma que cada 
componente sea igual al cuadrado del componente original.
'''
def cuadrado_lista (a):
    '''
    Eleva al cuadrado los elementos de una lista
    '''
    for i in range(len(a)): 
        a[i] = a[i]**2
    
#No hace falta poner return: modifico la propia lista
    
In [92]:
    
lista = range(10)+range(3)
lista
    
    Out[92]:
In [93]:
    
cuadrado_lista(lista)
lista
    
    Out[93]:
In [94]:
    
#podemos representar mejor la lista
def dibuja(lista):
    # presenta por pantalla una lista
    k = len(lista)
    for i in range(k-1):
        print lista[i], ',',
    print lista[k-1]
    
In [95]:
    
dibuja(lista)
    
    
In [96]:
    
# creación de una lista aleatoria
def random_list(size):
    #Creo una lista aleatoria
    from random import randint
    # randint(a, b) devuelve un entero aleatorio N, 
    #a <= N <= b
    data = []
    for i in range(size):
        data.append(randint(-10,10))
    return data
    
In [100]:
    
milista = random_list(15)
dibuja(milista)
    
    
In [101]:
    
cuadrado_lista(milista)
dibuja(milista)
    
    
In [ ]: