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

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

Páginas do PDF

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

5.6 Extraindo Sublistas

EXERCÍCIO 5.11

 

Escreva um programa que dada a lista [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] gere a lista [5, 6,

7, 8, 9, 0, 1, 2, 3, 4].

 

EXERCÍCIO 5.12

 

Escreva um programa que dada a lista [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] gere a lista [1, 3,

5, 7, 9, 0, 2, 4, 6, 8].

 

5.6 EXTRAINDO SUBLISTAS

Se você quiser manipular apenas uma parte de uma lista, Python oferece recursos bem práticos para que se tenha acesso facilmente a trechos específicos da lista. Estas partes são chamadas de sublistas ou fatias.

A forma geral para fatiar uma lista é usar o nome da lista e

colocar a fatia desejada entre colchetes. A fatia é representada por um par de índices separados por dois pontos:

[i:f:p]

Explicando cada um desses parâmetros:

i : início é o índice inicial cujo elemento será incluído na fatia

resultante, exceto se seu valor for o mesmo que fim. Quando o valor é negativo, significa que indica uma contagem a partir do final, o -1 indicando o último elemento da lista. O valor por omissão é zero.

f : fim indica o fim da fatia. O valor nesta posição da lista não

entra na fatia resultante. Também pode ser negativo. O valor por omissão é o tamanho da lista e a fatia resultante inclui o último elemento da lista.

p : passo valor de incremento a partir do índice inicial. Se for negativo, conta do final para o início da lista. O valor por omissão é 1 .

Todos os índices devem ser válidos e qualquer expressão inteira pode ser usada. Contudo, atenção: o primeiro elemento da nova fatia é efetivamente aquele com índice i, porém o último elemento da fatia será o de índice f-1. A ausência de um dos índices indica que o intervalo é aberto, assim: [i:] engloba todos os elementos entre o índice i e o final da lista, enquanto [:f] toma todos os elementos entre o início da lista e o índice f-1. O passo p é opcional e indica o incremento a partir do índice inicial.

Os valores-padrão, quando omitidos qualquer um dos valores são i = 0, f = tamanho da lista e p = 1.

Considere uma lista de nomes de planetas:

planetas = [

‘Mercúrio’, ‘Vênus’, ‘Terra’, ‘Marte’, ‘Saturno’

,

‘Júpiter’, ‘Urano’, ‘Netuno’

]

O Programa 5.20 mostra o resultado do fatiamento de uma lista e, por enquanto, usa o valor-padrão para o passo, ou seja, 1.

planetas = [

‘Mercúrio’, ‘Vênus’, ‘Terra’, ‘Marte’, ‘Saturno’

,

‘Júpiter’, ‘Urano’, ‘Netuno’

]

print(planetas[2:5])

print(planetas[:3])

print(planetas[3:])

print(planetas[4:-1])

print(planetas[:])

 

■ Programa 5.20: Programa de fatiamento de lista sem passo.

O resultado será:

[‘Terra’, ‘Marte’, ‘Saturno’]

[‘Mercúrio’, ‘Vênus’, ‘Terra’]

[‘Marte’, ‘Saturno’, ‘Júpiter’, ‘Urano’, ‘Netuno’]

[‘Saturno’, ‘Júpiter’, ‘Urano’]

[‘Mercúrio’, ‘Vênus’, ‘Terra’, ‘Marte’, ‘Saturno’, ‘

Júpiter’,

‘Urano’, ‘Netuno’]

A primeira fatia engloba os elementos de índices 2, 3 e 4; a

segunda fatia toma os elementos 0, 1 e 2; a terceira fatia pega os elementos de índices 3, 4, 5, 6 e 7; a quarta lista, os elementos de índices 4, 5 e 6. Lembre-se de que -1 representa o último elemento da lista, no caso, o de índice 7. Com isto, a expressão equivale a [4:7]. Finalmente, quando os dois índices estão ausentes, a referência é a lista inteira.

Este fatiamento permite operações poderosas sobre as listas. O

programa 5.21 apresenta algumas opções, neste ponto incluindo o passo do fatiamento. As possibilidades são inúmeras para manipulação de uma lista com este tipo de operação. Teste algumas outras opções para entender o mecanismo.

primos = [2, 3, 13, 17, 19]

print(‘Lista completa: ‘, primos[:])

print(‘Lista de 2 em 2, começando em 0: ‘, primos[::

2])

print(‘Lista de 3 em 3, começando em 0: ‘, primos[::

3])

primos[2:2] = [5, 7]

primos[4:4] = [11]

print(‘Lista completa: ‘, primos[:])

print(‘Lista de 2 em 2, começando em 3: ‘, primos[3:

:2])

print(‘Lista de 2 em 2, terminando em 4: ‘, primos[:

5:2])

primos[2:3] = []

print(‘Retira 1 elemento da posição 2: ‘, primos)

primos[::2] = [3, 11, 17, 23]

print(‘Substitui 4 elementos: ‘, primos) primos[::2] = [2, 7, 13, 19]

primos[2:2] = [5]

print(‘Reinserindo elementos: ‘, primos[:])

 

■ Programa 5.21: Operações de fatiamento de uma lista.

 

O resultado da execução do programa de fatiamento de lista é:

Lista completa: [2, 3, 13, 17, 19] Lista de 2 em 2, começando em 0: [2, 13, 19] Lista de 3 em 3, começando em 0: [2, 17] Lista completa: [2, 3, 5, 7, 11, 13, 17, 19] Lista de 2 em 2, começando em 3: [7, 13, 19] Lista de 2 em 2, terminando em 4: [2, 5, 11] Retira 1 elemento da posição 2: [2, 3, 7, 11, 13, 1 7, 19]

Substitui 4 elementos: [3, 3, 11, 11, 17, 17, 23] Reinserindo elementos: [2, 3, 5, 7, 11, 13, 17, 19]

Um resumo das operações de fatiamento é mostrado na Tabela

5.1.

 

Tabela 5.1 Resumo de fatiamento de listas

 

Fatia Resultado

 

[:] ou [::] todos os elementos

 

[i::] todos os elementos de i até o último

 

[:f:] todos os elementos até f – 1

[i:f:] todos os elementos de i até f – 1

 

[::p] todos os elementos até f – 1, com p de distância entre esses elementos

 

[i::p] todos os elementos de i até f – 1, com p de distância entre esses

elementos

 

[:f:p] todos os elementos do primeiro até f – 1, com p de distância entre esses

elementos

 

[i:f:p] toma os elementos da lista, começando em i até f – 1, com p de

distância entre esses elementos

 

Se o valor do passo é negativo, a ordem é invertida, pois

estaremos contando de trás para a frente. A Tabela 5.2 resume esses casos.

 

Tabela 5.2 Resumo de fatiamento de listas com índices negativos

 

Fatia Resultado

 

[::-p] todos os elementos do último até o primeiro, com p de distância entre

esses elementos

 

[i::-p] todos os elementos de i até o início, com p de distância entre esses

elementos

 

[:f:-p] todos os elementos do último até f + 1, com p de distância entre esses

elementos

 

[i:f:-p] engloba os elementos da lista, começando em i até f + 1, com p de

distância entre esses elementos

 

Veja o Programa 5.22 que demonstra o uso de passo negativo na operação de fatiamento em Python.

lista = [0,1,2,3,4,5,6,7,8,9]

print(lista[::-1])

print(lista[4::-1])

print(lista[:5:-1])

print(lista[5:2:-1])

 

■ Programa 5.22: Programa de fatiamento de lista com passo

negativo.

 

O resultado é:

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

[4, 3, 2, 1, 0]

[9, 8, 7, 6]

[5, 4, 3]

 

EXERCÍCIO 5.13

 

Dada a lista [10, 2, 32, 14, 35, 46, 17, 58, 199, 19], escreva um programa que

imprima:

1. os elementos de índices pares;

2. os elementos de índices ímpares;

3. os elementos entre os índices 2 (inclusive) e 4 (exclusive);

4. o elemento de índice 1 e depois os elementos distantes 3 posições a partir de

1, até o nal.

 

EXERCÍCIO 5.14

 

Gere uma lista com 100 números de 0 a 99, com o comando range() e,

usando valores negativos no fatiamento, escreva um programa que imprima:

1. o último elemento da lista original e depois, decrescendo, os elementos

distantes 3 posições a partir do nal até o início;

2. os elementos entre o índice 87 (inclusive) e o índice 34 (exclusive), em ordem

decrescente de índices;

3. todos os elementos, exceto os dois últimos.

 

EXERCÍCIO 5.15

 

Dada a lista [1, 2, 3, 4, 5, 6, 7], imprima seu inverso, ou seja, [7, 6, 5, 4, 3, 2, 1]

usando apenas fatiamento.

 

EXERCÍCIO 5.16

 

Considere a lista

planetas = [‘Mercúrio’, ‘Vênus’, ‘Terra’,

‘Marte’, ‘Saturno’, ‘Júpiter’, ‘Urano’,

‘Netuno’].

 

Execute as seguintes operações usando apenas fatiamento. Cada item usa a lista

resultante do item anterior.