Funções com listas

Tópicos

  • fatias de listas;
  • cuidado com atribuição de listas;
  • clone (= cópia) de listas;
  • cuidados com a questão Referências versus clones no que diz respeito a listas como argumentos de funções.

Fatias

Muitas vezes, ao invés de considerar a lista completa, é necessário consider apenas um pedaço contínuo da lista, que podemos definir por 2 índices que marcam o início e o fim desse pedaço, que chamamos de fatia da lista.

Em Python, uma fatia de uma lista é definida colando o ínicio e o fim entre colchetes, separados por :, como:

>>> primos = [2, 3, 5, 7, 11]
>>> primos[1:2]
[3]
>>> primos[2:4]
[5, 7]
>>> primos[:3] # observe que o início não precisa ser definido
[2, 3, 5]
>>> primos[3:] # observe que o fim não precisa definido
[7, 11]
>>> primos[:]
[2, 3, 5, 7, 11]

Referências versus clones

Atribuição de listas criam uma nova referência para lista, não criam um clone (= cópia) da lista.

(clonar_uma_lista_0)

Algumas maneiras de clonarmos uma lista são:

  • usando fatiamento (= slice); está é a forma pythonica:

    lista_2 = lista_1[:]
    
  • escrevendo uma função; está é a forma pedagógica:

    def clone_lista(lista):
        '''(list) -> list
    
        Recebe uma lista e retorna um clone dessa lista.
        '''
        clone = []
        for objeto in lista:
            clone.append(objeto))
        return clone
    

Exemplo de clonagem com fatiamento:

(clonar_uma_lista_1)

Exemplo de clonagem com uma função:

(clonar_uma_lista_2)

Exercícios

Exercício 10.1

Escreva a função abaixo:

(aula10_ex101_tentativa)



Exercício 10.2

Escreva um programa que dados um número inteiro n e uma sequência com n números inteiros, imprimi-los eliminando as repetições.

Escreva uma solução que usa a função pertence() do exercício anterior.

Escreva uma solução que usa as construções

if item in lista:
    |
    | bloco de comandos a serem executados
    | se item pertence a lista
    |

if item not in lista:
    |
    | bloco de comandos a serem executados
    | se item nao pertence a lista
    |

if not item in lista:
    |
    | bloco de comandos a serem executados
    | se item nao pertence a lista
    |

(aula10_ex102_tentativa)



Exercício 10.3

Escreva a função abaixo:

(aula10_ex103_tentativa)



Exercício 10.4

Escreva um programa que dados um número inteiro n e uma sequência com n números inteiros, conta e imprime o número de vezes que cada número ocorre na sequência.

Escreva uma solução que usa a função indice() do exercício anterior.

(aula10_ex104_tentativa)



Exercício 10.5

Escreva a função abaixo:

(aula10_ex105_tentativa)



Exercício 10.6

Usando a função do exercício anterior, escreva um programa que leia n>0 e uma sequência com n números reais, e determina um segmento de soma máxima.

Na sequência

5   -2   -2   -7   3   14  10  -3   9   -6   4   1

a soma máxima de um segmento é 3+14+10-3+9 = 33.

(aula10_ex106_tentativa)



Leitura complementar

A leitura e vídeos sugeridos aqui, em geral, contém (muito?) mais tópicos do que os que vistos durante a aula. Os tópicos não vistos na aula serão cobertos em algum momento mais oportuno.

Leitura das seções:

do capítulo Listas do livro interativo Como pensar como um Cientísta da Computação.