Tuplos e listas
Sequências, desempacotamento, operações, mutação, alias e cópia superficial.
Sequências e mutação
- Listas, tuplos e strings têm ordem e suportam
len, índices, fatias ein. A lista é mutável; o recipiente tuplo é imutável. - A vírgula cria o tuplo:
(12,)tem um elemento,(12)é um inteiro.x, y = (3, 4)desempacota; o número de nomes tem de coincidir com o de elementos. a, b = b, ausa os valores antigos no lado direito. Um tuplo pode conter uma lista que continua mutável.
| Operação | Efeito |
|---|---|
xs.append(x) | Acrescenta x como um elemento |
xs.extend(ys) | Acrescenta cada elemento de ys |
xs.insert(i, x) | Insere antes de i |
xs.pop(i) | Retira e devolve o elemento |
xs.remove(x) | Retira a primeira ocorrência; falha se faltar |
del xs[i] | Retira sem devolver |
xs[a:b] = ys | Substitui a fatia, podendo mudar o comprimento |
append,extend,insert,remove,sortereversedevolvemNone.xs = xs.append(4)perde a referência à lista.- Evita alterar o comprimento da lista durante o próprio percurso sem uma estratégia explícita.
Alias e cópia superficial
b = acria outro nome para o mesmo objeto, um alias.==compara conteúdo;iscompara identidade.a.copy()ea[:]criam outra lista exterior, mantendo referências aos elementos. A cópia é superficial.
matriz = [[1, 2], [3, 4]]
copia = matriz.copy()
copia[0][0] = 9
print(matriz)
print(copia)
print(matriz is copia, matriz[0] is copia[0])Resultado
Executa o código para ver a saída e os gráficos.
Ambas mostram [[9, 2], [3, 4]]; a última linha é False True.
- As listas exteriores são distintas, mas a primeira linha é partilhada.
- Para esta matriz de inteiros, copiar cada linha separa a mutação.
- Estruturas mais profundas podem exigir copiar mais níveis.
[[0] * 3] * 2repete a mesma linha; cria cada linha separadamente para serem independentes.
Percorrer, combinar e ordenar
enumerate(xs)fornece índice e valor.zip(u, v)fornece pares correspondentes e termina na sequência mais curta. Valida comprimentos iguais se o contrato o exigir.- O produto interno de
[2, 3]e[4, 5]é ; para vetores vazios, a soma é zero. sorted(xs)devolve uma lista nova;xs.sort()altera a existente e devolveNone.reverse=Truepede ordem decrescente;keyescolhe o valor usado na comparação.