Introdução à programação e aos algoritmos

João Araujo Ribeiro · Capítulo 67 de 103

Páginas do PDF

Introdução à programação e aos algoritmos

5.7 Operações em Listas

1. Insira a lista [‘Fobos’,’Deimos’] na posição 4 da lista.

2. Insira [‘Sol’] na posição zero.

3. Qual seria o fatiamento para imprimir [‘Urano’, ‘Júpiter’, ‘Saturno’, ‘Deimos’,

‘Fobos’, ‘Marte’, ‘Terra’, ‘Vênus’], nessa ordem?

 

5.7 OPERAÇÕES EM LISTAS

Já usamos duas operações que atuam com listas: len() e range(), mas Python tem outras operações que podem atuar internamente em uma lista.

Uma operação útil e que já vimos é a pertinência, apesar de não ter sido apresentada com este nome. A operação in, além de fazer uma variável assumir sucessivamente os valores dos elementos de uma lista, também serve para testar se determinado elemento consta da lista.

O Programa 5.23 testa se um número ímpar pertence ou não à lista primos.

primos = [2, 3, 5, 7, 11, 13, 17, 19]

for i in range(3, 20, 2):

if i in primos:

print(i, ‘está em primos.’)

else:

print(i, ‘não está em primos.’)

 

■ Programa 5.23: Teste de pertencimento a uma lista.

 

Da mesma forma que com o fatiamento, a função range também pode ter três parâmetros, com a diferença de que são separados por vírgulas. O primeiro parâmetro é o valor inicial, o segundo é o valor final, porém o parâmetro não fará parte da sequência gerada, e, finalmente, o terceiro parâmetro é o passo usado para gerar a sequência, no caso começando em 3 e avançando de 2 em 2 até 19. A sequência gerada por range(), neste caso é [3, 5, 7, 9, 11, 13, 15, 17, 19]. No programa, depois de gerada a sequência por range() , a variável i assume sucessivamente os valores da sequência para testar se estes pertencem à lista primos.

3 está em primos.

5 está em primos.

7 está em primos.

9 não está em primos.

11 está em primos.

13 está em primos.

15 não está em primos.

17 está em primos.

19 está primos.

Com o fatiamento, conseguimos apagar um ou diversos

elementos de uma lista, no entanto existe uma forma mais direta de apagar um ou mais elementos de uma lista: o comando del. A sintaxe do comando del é del lista[i:f], em que i e f são os índices inicial e final, lembrando sempre que o valor de f deve ser descontado de 1, com a finalidade de se saber quem será o último elemento da seleção.

O nome del vem do inglês “delete”, e quer dizer apagar,

suprimir, remover. É interessante saber que a palavra tem origem no latim “deletus”. Foi perdida pela língua portuguesa, mas foi incorporada ao inglês vindo do francês. Com o avanço da Computação, o vocábulo vem pouco a pouco sendo retomado pelos falantes da língua portuguesa.

primos = [2, 3, 5, 7, 11, 13, 17, 19]

print(primos)

del primos[1:3]

print(primos)

del primos[1]

print(primos)

 

■ Programa 5.24: Comando del em lista.

O uso do comando del evidencia mais a ação de “deletar” elementos de uma lista. A execução do programa fornece a saída:

[2, 3, 5, 7, 11, 13, 17, 19]

[2, 7, 11, 13, 17, 19]

[2, 11, 13, 17, 19]

O primeiro comando del apaga os elementos 3 e 5, cujos índices são 1 e 2, respectivamente. O segundo comando del apaga apenas o elemento 7, que passou a ter índice 1 após a execução do primeiro comando.

Python também possui uma classe de comandos para listas que fogem à sintaxe que vimos usando até agora. Qual a diferença? Até este momento usamos os comandos que atuavam como uma ação externa à lista. Os comandos a seguir funcionam como se fossem internos à lista.

Como assim, “internos”?

Desde o início tenho falado que trabalhamos com abstrações. Imagine que a lista é um ser abstrato que guarda para você uma sequência de valores, sejam do tipo que forem. Agora imagine que esse ser abstrato que é a lista consegue executar ações em si mesmo, desde que você peça de forma correta.

Percebe a diferença?

Anteriormente, a lista, e todos os nossos dados, eram como seres inanimados, que só continham as informações. A partir deste ponto, além das informações as listas também são capazes de executar ações internas, modificando ou informando seu estado.

Esse é o princípio da chamada “Programação Orientada a Objetos”. Para diferenciar os comandos que são executados sobre as listas daqueles que são executados pelas listas, a sintaxe muda um pouco. Os comandos agora são executados pela adição, à lista, de um ponto e do nome do comando.

Por exemplo, o Programa 5.25 apresenta algumas ações úteis definidas pelas listas em Python.

lista = [123, 1, 0, 24, 1, 14]

print(‘A lista:’, lista)

lista.append(34)

lista.append(2)

print(‘Acrescenta 2 itens:’, lista)

lista.extend([45, 12])

print(‘Estende com 2 itens:’, lista)

lista.insert(1, 345)

print(‘Insere item na posição i:’, lista)

lista.remove(24)

print(‘Remove item:’, lista)

lista.pop()

print(‘Retira último item:’, lista)

print(‘A lista possui ‘, lista.count(1),

‘itens de valor 1.’)

outralista = sorted(lista)

print(‘Outra lista ordenada: ‘, outralista)

lista.sort()

print(‘Ordena a lista:’, lista)

lista.reverse()

print(‘Inverte a lista:’, lista)

print(‘O elemento 14 está na posição ‘, lista.index(

14))

print(‘O mínimo é ‘, min(lista), ‘ e o máximo é ‘,

max(lista))

 

■ Programa 5.25: Funções úteis de lista.

 

A execução dá como resultado:

A lista: [123, 1, 0, 24, 1, 14]

Acrescenta 2 itens: [123, 1, 0, 24, 1, 14, 34, 2]

Estende com 2 itens: [123, 1, 0, 24, 1, 14, 34, 2, 4

5, 12]

Insere item na posição i: [123, 345, 1, 0, 24, 1, 14

, 34, 2, 45, 12]

Remove item: [123, 345, 1, 0, 1, 14, 34, 2, 45, 12]

Retira último item: [123, 345, 1, 0, 1, 14, 34, 2, 4

5]

A lista possui 2 itens de valor 1. Outra lista ordenada: [0, 1, 1, 2, 14, 34, 45, 123, 345]

Ordena a lista: [0, 1, 1, 2, 14, 34, 45, 123, 345] Inverte a lista: [345, 123, 45, 34, 14, 2, 1, 1, 0] O elemento 14 está na posição 4

O mínimo é 0 e o máximo é 345

Aqui vai um resumo do que cada função, sendo l ou t uma lista, i um índice inteiro e x um valor. Podemos dividir as operações em dois grupos. Primeiro, operações que não modificam a lista original:

in testa a pertinência de um item a uma lista.

del apaga elementos de uma lista. Como em del lista[1:2].

sorted(lista) ordena uma lista e atribui o resultado a outra lista. A lista usada como parâmetro não muda. Ex.: lista_nova = sorted(l) .

min devolve o menor valor da lista. Ex.: x = min(l).

max devolve o maior valor da lista. Ex.: x = max(l).

count(x) conta quantos elementos iguais a x existem na lista. Ex.: y = count(l).

Em segundo lugar, as funções que vão modificar a lista original:

append(x) acrescenta x ao final da lista. Equivalente a l[len(l):len(l)] = [x] . Ex.: l.append(1).

extend(t) estende uma lista com t. Na maioria das vezes equivalente a l[len(l):len(l)] = t. Ex.: l.extend([1])

insert(i,x) insere o elemento x na posição i. Equivalente a l[i:i] = [x]. Ex.: l.insert(3,1).

remove(x) remove o primeiro elemento da lista que seja igual a x . Ex.: l.remove(2).

pop() lê e retira o último elemento da lista. Usa também a sintaxe pop(i) no qual lê e retira o elemento na posição i). Ex.: l.pop() .

sort() ordena a própria lista. Ex.: l.sort().

reverse() inverte a ordem dos elementos da lista. Ex.:

l.reverse().

Com essas funções as operações em listas ficam bem mais

fáceis. O Programa 5.26 cria uma lista dinamicamente e vai acrescentando elementos digitados pelo usuário.

numeros = []

for i in range(10):

n = int(input(‘Digite um número:’))

numeros.append(n)

print (‘A lista criada é:’,numeros)

 

■ Programa 5.26: Lista com dados digitados pelo usuário.

 

EXERCÍCIO 5.17

 

O que acontece se você chama o comando append() com outra lista?

Considere a lista primos = [2, 3, 5, 7] e que você use o

comando primos.append([23,29,31]). Tente imprimir o

elemento primos[4]. O que é impresso?

 

EXERCÍCIO 5.18

 

Execute as mesmas operações do exercício 5.17, mas usando o comando

extend() no lugar de append() com uma lista. O que acontece?

Houve alguma diferença? Tente imprimir o elemento primos[4]. O que é

impresso?

 

EXERCÍCIO 5.19

 

O que acontece se o terceiro parâmetro de uma operação de fatiamento for -1?

Teste em uma lista qualquer o comando lista[::-1]. Qual a diferença

para reverse()?

 

EXERCÍCIO 5.20

 

Escreva um programa que inverta uma lista usando o método de lista

por compreensão.

 

EXERCÍCIO 5.21

 

Use os comandos desta seção para criar uma nova lista com os elementos da

primeira metade de uma lista. Por exemplo, se temos lista = [0, 1, 2, 3, 4, 5, 6, 7,

8, 9], use os comandos para obter [0, 1, 2, 3, 4].

 

EXERCÍCIO 5.22

 

Use os comandos desta seção para apagar os elementos da primeira metade de

uma lista. Por exemplo, se temos lista = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], use os

comandos para obter lista = [5, 6, 7, 8, 9].

 

EXERCÍCIO 5.23

 

Use os comandos desta seção para inverter os elementos da primeira metade de

uma lista. Por exemplo, se a lista é lista = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], use os

comandos para obter [4, 3, 2, 1, 0, 5, 6, 7, 8, 9].

 

EXERCÍCIO 5.24

 

Partindo da lista = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], use os comandos desta seção para

obter [5, 6, 7, 8, 9, 4, 3, 2, 1, 0].