Declara-se uma lista, colocando entre colchetes uma sequência de dados separados por vírgula:
identificador = [ \text{dado}_1, \text{dado}_2, \ldots, \text{dado}_n]
Exemplo de listas:
Uma lista de inteiros.
x = [2, 45, 12, 9.78, -2]
Listas podem conter dados de tipos diferentes.
x = [2, "qwerty" ,45.99087, 0, "a"]
Listas podem conter outras listas.
x = [2, [4,5], [9] ]
Ou podem não conter nada. Neste caso [] indica a lista vazia.
x = []
Pode-se acessar uma determinada posição da lista utilizando-se um índice de valor inteiro.
Sendo n o tamanho da lista, os índices válidos para ela vão de 0 até n-1.
A primeira posição da lista tem índice 0.
A última posição da lista tem índice n-1.
A sintaxe para acesso de uma determinada posição é:
Um elemento de uma lista em uma posição específica tem o mesmo comportamento que uma variável simples.
>>> notas= [4.5, 8.6, 9, 7.8, 7]
>>> notas[1]+2
10.6
>>> notas[3]=0.4
>>> notas
[4.5, 8.6, 9, 0.4, 7]
Índices negativos se referem a lista da direita para a esquerda:
>>> notas= [4.5, 8.6, 9, 7.8, 7]
>>> notas[-1]
7
Ocorre um erro se tentarmos acessar uma posição da lista que não existe.
>>> notas[100]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>>> notas[-6]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
A função len(lista) retorna o número de itens na lista.
>>> x=[16,5,4,4,7,9]
>>> len(x)
6
Uma operação importante é acrescentar um item no final de uma lista. Isto é feito pela função append.
lista.append(item)
>>> x=[6,5]
>>> x.append(98)
>>> x
[6, 5, 98]
Note o formato diferente da função append. A
lista que será modificada aparece antes, seguida de um ponto, seguida do
append com o item a ser incluído como argumento.
Formalmente, este tipo de função é chamada de
método
.
normalmente os metodos modificam o argumento - a lista que é passada antes do nome do metodo.
outro metodo é o sort
que ordena uma lista
>>> a = [3,2,5,3,1,6]
>>> a.sort()
>>> a
[1, 2, 3, 3, 5, 6]
sort
é um metodo que modifica seu argumento e nao
retorna nada
existe uma função sorted
que faz
algo parecido, mas não modifica o argumento, e portanto não tem o
formato de metodo
>>> a = [3,2,5,3,1,6]
>>> b = sorted(a)
>>> a
[3,2,5,3,1,6]
>>> b
[1,2,3,3,5,6]
sorted
é uma função que nao modifica seu argumento e
que retorna a lista ordenada
+
)A operação de soma em listas gera uma nova lista que é o resultado de “grudar” lista2 ao final da lista1. Isto é conhecido como concatenação de listas.
lista1 + lista2
>>> lista1=[1,2,4]
>>> lista2=[27,28,29,30,33]
>>> x=lista1+lista2
>>> x
[1, 2, 4, 27, 28, 29, 30, 33]
>>> lista1
[1, 2, 4]
>>> lista2
[27, 28, 29, 30, 33]
Veja que a operação de concatenação não modifica as listas originais.
Testes de igualdade em listas funcionam e verificam se cada elemento da primeira lista é igual ao seu correspondente na segunda lista
a = [1,2,4]
b = [1,2,3]
a==b
b.append(9)
a==b
x = [1,[2,3],4]
y = [1,[2,3],4]
z = [1,[2,3,7],4]
x==y
x==z
in
vefifica se um elemento pertence a uma
listaa = [0,4,6,8]
0 in a
1 in a
#calculando o produto interno
def prod_interno(l1,l2):
resultado = l1[0]*l2[0]+l1[1]*l2[1]+l1[2]*l2[2]
return resultado
Mas isso só funciona para listas de tamanho 3. E para outros tamanhos?
Estrutura:
for variável in lista:
comando
...
comando
proximo comando
Para cada elemento da lista, em ordem de ocorrência, é atribuído este elemento à variável e então é executado os comandos.
O for
faz a variável passear pela lista
O programa abaixo usa o laço for para imprimir números de uma lista.
a = [1, 21, 31]
for i in a:
print(i)
É comum fazermos um laço for iterar sobre valores numéricos.
Em Python o comando range(n) gera uma lista (implicita) com os valores de 0 até n-1.
O programa abaixo imprime os números de 0 até 9.
for i in range(10):
print(i)
Podemos especificar um intervalo de valores na função range:
Podemos especificar um passo a ser considerado no intervalo de valores da função range.
O programa abaixo imprime os números pares entre 0 e menores que 13.
for i in range(0,13,2):
print(i)
lista = [1, 2, 3, 4, 7.6, 8.7, 9.5, 4]
for i in range(len(lista)):
lista[i] = lista[i]*2
def prod_interno(l1, l2):
resultado = 0.0
for i in range(len(l1)):
resultado = resultado + l1[i] * l2[i]
return resultado
vamos ver no ChatGPT
escreva uma funcao que calcula o produto interno de duas listas
def produto_interno(lista1, lista2):
# Verifica se as listas têm o mesmo comprimento
if len(lista1) != len(lista2):
return "As listas devem ter o mesmo comprimento"
# Inicializa o produto interno com zero
produto = 0
# Calcula o produto interno
for i in range(len(lista1)):
produto += lista1[i] * lista2[i]
return produto
Algumas coisa sao parecidas com listas onde
for
funciona==
, +
, in
funcionamlen
e outras funções funcionam[]
funcionamas nao podem ser modificados (pelo append, por outros metodos ou por atribuição)
tuplas sao listas imutaveis representadas por
(dado0, dado1, dado3)
dados entre parenteses
metodos de lista não funcionam pois tuplas são imutaveis e metodos (em listas) modificam o argumento
atribuição nao funciona
a = (2,4,6,8)
a[0] = -1
tuplas em alguns casos sao abreviadas não usando o parenteses. Assim em quase todo lugar onde voce ve 2 ou mais coisas separadas por virgula, mas vc estava esperando apenas uma coisa, há uma tupla implicita
return de mais de 1 valor é feito com
return a, b
nesse caso o return esta montando uma tupla com os 2 valores
se uma funcão retorna 3 valores (ou seja uma tupla de 3 valores) entao vc pode usar
a,b,c = func(34)
nesse caso vc esta esperando apenas uma variavel do lado esquerdo e uma atribuicao mas há 3 variaveis, separadas por virgula.
isso significa que os 3 valores retornados pela func
vao ser armazenados em a
, b
e c
respectivamente
O range
não cria uma lista verdadeira. Ele cria uma
lista implicita que é imutavel (e portanto nao pode ser
modificada) mas o ==
e +
não funcionam
tambem.
O print
nao imprime o range como uma lista
a = range(4)
print(a)
a == [0,1,2,3]
len(a)
a[2]
a + [10,20]
outras funcoes criam listas implicitas (map
por
exemplo)
para converter uma lista implicita para uma lista normal use a função
list
b = list(a)
print(b)
b == [0,1,2,3]