Como Verificar se uma Lista Está Ordenada em Ordem Crescente em Python

PythonBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como verificar se uma lista está ordenada em ordem ascendente em Python. O laboratório se concentra em entender listas ordenadas e como manipulá-las usando a função sorted(). Você aprenderá como criar uma lista ordenada a partir de uma lista existente, ordenar em ordem ascendente e descendente usando o parâmetro reverse e observar que a lista original permanece inalterada.

O laboratório irá guiá-lo através da criação de um script Python chamado sort_list.py em seu diretório ~/project, adicionando trechos de código e executando o script para observar a saída. Você verá como a função sorted() retorna uma nova lista ordenada sem modificar a original e como usar o parâmetro reverse para ordenar em ordem descendente. O laboratório então prosseguirá para métodos adicionais para verificar se uma lista está ordenada.

Entenda as Listas Ordenadas

Nesta etapa, você aprenderá sobre listas ordenadas em Python. Uma lista ordenada é simplesmente uma lista onde os elementos são organizados em uma ordem específica, seja ascendente ou descendente. Entender como criar e manipular listas ordenadas é uma habilidade fundamental na programação Python.

Vamos começar criando uma lista simples de números:

numbers = [3, 1, 4, 1, 5, 9, 2, 6]
print(numbers)

Salve este código em um arquivo chamado sort_list.py em seu diretório ~/project. Você pode usar o editor VS Code para criar e editar este arquivo.

Agora, execute o script usando o seguinte comando em seu terminal:

python sort_list.py

Você deve ver a lista original impressa no console:

[3, 1, 4, 1, 5, 9, 2, 6]

Para criar uma versão ordenada desta lista, você pode usar a função sorted(). A função sorted() recebe um iterável (como uma lista) como entrada e retorna uma nova lista com todos os elementos em ordem ascendente:

numbers = [3, 1, 4, 1, 5, 9, 2, 6]
sorted_numbers = sorted(numbers)
print(sorted_numbers)

Modifique seu arquivo sort_list.py para incluir a função sorted(). Execute o script novamente:

python sort_list.py

Agora, você deve ver a lista ordenada impressa no console:

[1, 1, 2, 3, 4, 5, 6, 9]

A lista original numbers permanece inalterada. A função sorted() cria uma nova lista ordenada sem modificar a original.

Você também pode ordenar a lista em ordem descendente usando o parâmetro reverse:

numbers = [3, 1, 4, 1, 5, 9, 2, 6]
sorted_numbers_desc = sorted(numbers, reverse=True)
print(sorted_numbers_desc)

Adicione isso ao seu arquivo sort_list.py e execute-o:

python sort_list.py

Você verá a lista ordenada em ordem descendente:

[9, 6, 5, 4, 3, 2, 1, 1]

Entender a função sorted() e como usar o parâmetro reverse é crucial para trabalhar com listas ordenadas em Python.

Comparar com sorted()

Nesta etapa, você se aprofundará na função sorted() e a comparará com outro método para ordenar listas: o método list.sort(). Entender as diferenças entre essas duas abordagens é essencial para a manipulação eficiente e eficaz de listas em Python.

Vamos começar revisando a função sorted(). Como você aprendeu na etapa anterior, sorted() retorna uma nova lista ordenada sem modificar a lista original.

Agora, vamos explorar o método list.sort(). Este método ordena a lista in place (no local), o que significa que ele modifica a lista original diretamente.

Considere o seguinte exemplo:

numbers = [3, 1, 4, 1, 5, 9, 2, 6]
numbers.sort()
print(numbers)

Adicione este código ao seu arquivo sort_list.py, substituindo o conteúdo anterior. Em seguida, execute o script:

python sort_list.py

Você deve ver a lista original numbers modificada e ordenada em ordem ascendente:

[1, 1, 2, 3, 4, 5, 6, 9]

Observe que numbers.sort() não retorna uma nova lista; ele modifica a existente.

Aqui está uma comparação dos dois métodos:

  • sorted(list):

    • Retorna uma nova lista ordenada.
    • A lista original permanece inalterada.
    • Pode ser usado com qualquer iterável (por exemplo, tuplas, strings).
  • list.sort():

    • Ordena a lista in place (modifica a lista original).
    • Retorna None.
    • Só pode ser usado com listas.

Para ilustrar ainda mais a diferença, vamos tentar atribuir o resultado de list.sort() a uma variável:

numbers = [3, 1, 4, 1, 5, 9, 2, 6]
sorted_numbers = numbers.sort()
print(sorted_numbers)
print(numbers)

Execute este código:

python sort_list.py

Você verá a seguinte saída:

None
[1, 1, 2, 3, 4, 5, 6, 9]

Como você pode ver, sorted_numbers é None porque numbers.sort() modifica a lista in place e retorna None. A lista numbers agora está ordenada.

A escolha entre sorted() e list.sort() depende de suas necessidades específicas. Se você deseja manter a lista original intacta, use sorted(). Se você deseja modificar a lista diretamente e não precisa manter a original, list.sort() é mais eficiente.

Verificar com all() e zip()

Nesta etapa, você aprenderá como usar as funções all() e zip() para verificar se uma lista está ordenada. Essas funções fornecem uma maneira concisa e eficiente de verificar a ordem dos elementos em uma lista.

Primeiro, vamos entender a função zip(). A função zip() recebe múltiplos iteráveis (por exemplo, listas) como entrada e retorna um iterador de tuplas, onde cada tupla contém os elementos correspondentes dos iteráveis de entrada.

Considere o seguinte exemplo:

list1 = [1, 2, 3]
list2 = [4, 5, 6]
zipped = zip(list1, list2)
print(list(zipped))

Adicione este código ao seu arquivo sort_list.py, substituindo o conteúdo anterior. Em seguida, execute o script:

python sort_list.py

Você deve ver a seguinte saída:

[(1, 4), (2, 5), (3, 6)]

A função zip() criou um iterador que produz tuplas contendo elementos correspondentes de list1 e list2.

Agora, vamos entender a função all(). A função all() recebe um iterável como entrada e retorna True se todos os elementos no iterável forem verdadeiros, e False caso contrário.

Considere o seguinte exemplo:

bool_list = [True, True, True]
print(all(bool_list))

bool_list = [True, False, True]
print(all(bool_list))

Adicione este código ao seu arquivo sort_list.py e execute-o:

python sort_list.py

Você verá a seguinte saída:

True
False

Agora, vamos combinar zip() e all() para verificar se uma lista está ordenada. A ideia é comparar cada elemento com o próximo elemento na lista e verificar se a lista está em ordem ascendente.

numbers = [1, 2, 3, 4, 5]
is_sorted = all(numbers[i] <= numbers[i+1] for i in range(len(numbers)-1))
print(is_sorted)

numbers = [1, 2, 5, 4, 5]
is_sorted = all(numbers[i] <= numbers[i+1] for i in range(len(numbers)-1))
print(is_sorted)

Modifique seu arquivo sort_list.py para incluir este código. Execute o script novamente:

python sort_list.py

Você deve ver a seguinte saída:

True
False

Este código usa uma expressão geradora com zip() para comparar elementos adjacentes na lista. A função all() então verifica se todas as comparações são verdadeiras, indicando que a lista está ordenada.

Essa abordagem fornece uma maneira concisa e eficiente de verificar se uma lista está ordenada em Python.

Resumo

Neste laboratório, você começa entendendo listas ordenadas em Python, que são listas onde os elementos são organizados em uma ordem específica. Você aprende a criar uma lista e, em seguida, usa a função sorted() para gerar uma nova lista com elementos em ordem ascendente, observando que a lista original permanece inalterada.

Além disso, você explora a ordenação em ordem decrescente, utilizando o parâmetro reverse=True dentro da função sorted(). Isso permite que você crie uma nova lista com elementos organizados do maior para o menor, solidificando sua compreensão de como manipular e criar listas ordenadas em Python.