Mais listas ainda e fatias
Mais listas ainda e fatias
Nesta provinha trabalharemos mais uma vez listas, desta vez fatiamentos também entram em cena.
Suponha que o Python tenha lido todas as funções a seguir (teclamos F5
no spyder
).
def f(x, y): n = len(x) for i in range(1, n, 2): x[i] = y return n def g(x): a = '' # string vazia for j in range(0, len(x), 1): a = x[j] + a return a
Suponha ainda que fizemos as seguintes atribuições:
In [1]: x = ['1', 'p', '3'] In [2]: y = x In [3]: n = f(y, 'n')
Listas (list
)
Listas são uma sequência de objetos delimitados por [
e ]
e separados por vírgulas.
Mutabilidade: listas são mutáveis; podemos alterar um componente, lst[i] = x
,
Variáveis são nomes/apelidos que damos a coisas ou valores.
Atribuições criam apenas novos apelidos ou atualizam apelidos existentes.
Atribuições não criam listas/objetos/coisas/….
lst = [1, "oi, [3, 4, 5], 2.7, None, True]
lstA = lst # lst e lstA são apelidos para uma mesma lista
lstB = lst[0:len(lst):1] # o mesmo que lst[:], lstB é um clone de lst
lst = [ 11, 22, 33, 44, 55, 66, 77, 88, 99 ]
lst
| 0 1 2 3 4 5 6 7 8 índices positivos
| +----+----+----+----+----+----+----+----+----+
+----> | 11 | 22 | 33 | 44 | 55 | 66 | 77 | 88 | 99 |
+----+----+----+----+----+----+----+----+----+
-9 -8 -7 -6 -5 -4 -3 -2 -1 índices positivos
Algumas operações sobre listas
A seguir está uma tabela resumindo algumas das operações sobre listas. No que segue lst
é lstA
são listas e ini
,fim
, passo
e n
números inteiros.
Operação | Resultado |
---|---|
x in lst |
True se x é item de lst , senão False |
x not in lst |
False se x é item de lst , senão True |
lstA + lstB |
a concatenação se lstA e lstB |
lst * n ou n * lst |
equivalente a lst ser concatenada n vezes |
lst[i] |
i-ésimo caractere de lst |
lst[ini:fim] |
fatia de lst de ini a fim |
lst[ini:fim:passo] |
fatia de lst de ini a fim com passo passo |
len(lst) |
comprimento de lst |
lst == lstA |
True se lst e lstA são iguais, senão False |
lst is lstA |
True se lst e lstA são apelidos para uma mesma lista |
lst[i]=x |
lista são mutáveis |
Criar listas
Para criar uma lista vazia fazemos:
Para cria uma nova lista podemos escrever:
In [13]: lst = ["M", 'A', True, None, 3.14, 123]
In [14]: lst
Out[14]: ['M', 'A', True, None, 3.14, 123]
In [15]: print(lst)
["M", 'A', True, None, 3.14, 123]
In [8]: lst = [] # lista vazia
In [9]: for i in range(5):
...: lst += [i] # colocamos i na lista
...:
In [10]: lst
Out[10]: [0, 1, 2, 3, 4]
In [11]: blá = -11 # suponha que é apelido para algum coisa, qualquer coisa
In [12]: lst_blas = 5 *[blá] # o mesmo que [blá]+[blá]+[blá]+[blá]+[blá]
In [13]: lst_blas
Out[13]: [-11, -11, -11, -11, -11]
In [14]: lst_blas2 = [blá] * 6 # o mesmo que [blá]+[blá]+[blá]+[blá]+[blá]+[blá]
In [15]: lst_blas2
Out[15]: [-11, -11, -11, -11, -11, -11]
Para criar clones/cópias é comum usarmos fatias:
In [1]: lst = [11, 22, [33, 44, 55], 66]
In [2]: lst[2]
Out[2]: [33, 44, 55]
In [3]: lst[-1]
Out[3]: 66
In [4]: lst[-3]
Out[4]: 22
In [5]: cloneA = lst[0: len(lst): 1] # ini : fim : passo
In [6]: cloneB = lst[:] # abreviatura de lst[0: len(lst): 1]
In [7]: apelido = lst
In [8]: lst == apelido
Out[8]: True
In [9]: lst == cloneA
Out[9]: True
In [10]: lst == cloneB
Out[10]: True
In [11]: lst is apelido
Out[11]: True
In [12]: lst is cloneA
Out[12]: False
In [13]: lst is cloneB
Out[13]: False
Listas são mutáveis, podemos alterar seus componentes ou acrescentar alguns
In [18]: lst = ["M", 'A', True, None, 3.14, 123]
In [19]: lst[2] = 'T' # altera
In [20]: lst += ["x-(wo)men"] # acrescenta
In [21]: lst
Out[21]: ['M', 'A', 'T', None, 3.14, 123, 'x-(wo)men']
Pecorrer listas
Há várias maneiras de percorrermos uma lista.