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

PythonBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como verificar se uma tupla está ordenada em ordem ascendente em Python. Tuplas, semelhantes a listas, são sequências imutáveis. Como as tuplas não podem ser diretamente ordenadas usando métodos que modificam a sequência original, este laboratório explora abordagens alternativas.

O laboratório demonstra como usar a função sorted() para criar uma nova lista ordenada a partir de uma tupla e convertê-la de volta em uma tupla. Ele também introduz as funções all() e zip() como ferramentas para verificar se uma tupla já está ordenada em ordem ascendente.

Aprenda Sobre Tuplas Ordenadas

Nesta etapa, você aprenderá sobre tuplas ordenadas em Python. Tuplas são semelhantes a listas, mas são imutáveis, o que significa que seus elementos não podem ser alterados após a criação. Uma tupla ordenada é simplesmente uma tupla cujos elementos estão organizados em uma ordem específica, normalmente ascendente ou descendente.

Como as tuplas são imutáveis, você não pode ordená-las diretamente usando métodos como sort() que modificam a lista original. Em vez disso, você usará a função sorted(), que retorna uma nova lista ordenada a partir dos elementos de qualquer iterável, incluindo tuplas. Você pode então converter esta lista ordenada de volta em uma tupla.

Vamos começar criando uma tupla simples:

my_tuple = (5, 2, 8, 1, 9)
print(my_tuple)

Agora, vamos ordenar esta tupla usando a função sorted() e converter o resultado de volta em uma tupla:

  1. Abra o editor VS Code no ambiente LabEx.
  2. Crie um novo arquivo chamado sort_tuple.py no diretório ~/project.
  3. Copie e cole o seguinte código em sort_tuple.py:
my_tuple = (5, 2, 8, 1, 9)
sorted_list = sorted(my_tuple)
sorted_tuple = tuple(sorted_list)

print("Original tuple:", my_tuple)
print("Sorted tuple:", sorted_tuple)

Este código primeiro define uma tupla chamada my_tuple. Em seguida, ele usa a função sorted() para criar uma lista ordenada a partir dos elementos de my_tuple. Finalmente, ele converte a lista ordenada de volta em uma tupla chamada sorted_tuple.

Para executar o script, abra um terminal no VS Code (você pode encontrá-lo no painel inferior) e execute o seguinte comando:

python sort_tuple.py

Você deve ver a seguinte saída:

Original tuple: (5, 2, 8, 1, 9)
Sorted tuple: (1, 2, 5, 8, 9)

Como você pode ver, a função sorted() retorna uma nova tupla com os elementos da tupla original organizados em ordem ascendente.

Você também pode ordenar a tupla em ordem descendente usando o parâmetro reverse da função sorted():

my_tuple = (5, 2, 8, 1, 9)
sorted_list = sorted(my_tuple, reverse=True)
sorted_tuple = tuple(sorted_list)

print("Original tuple:", my_tuple)
print("Sorted tuple (descending):", sorted_tuple)

Salve as alterações em sort_tuple.py e execute-o novamente:

python sort_tuple.py

A saída agora deve ser:

Original tuple: (5, 2, 8, 1, 9)
Sorted tuple (descending): (9, 8, 5, 2, 1)

Agora você tem uma tupla ordenada em ordem descendente.

Comparar com sorted()

Na etapa anterior, você aprendeu como ordenar uma tupla usando a função sorted(). Nesta etapa, vamos nos aprofundar na função sorted() e comparar seu comportamento com outros métodos, destacando sua versatilidade e casos de uso.

A função sorted() é uma função embutida do Python que pode ser usada para ordenar qualquer iterável, incluindo listas, tuplas, strings e dicionários. Ela retorna uma nova lista ordenada sem modificar o iterável original. Isso é particularmente útil quando você deseja preservar a estrutura de dados original.

Vamos explorar alguns exemplos para ilustrar o poder de sorted():

  1. Abra o editor VS Code no ambiente LabEx.
  2. Modifique o arquivo existente sort_tuple.py no diretório ~/project, ou crie-o se ele não existir.
  3. Copie e cole o seguinte código em sort_tuple.py:
## Sorting a list of strings
string_list = ["banana", "apple", "orange"]
sorted_string_list = sorted(string_list)
print("Original list:", string_list)
print("Sorted list:", sorted_string_list)

## Sorting a string (characters)
my_string = "hello"
sorted_string = sorted(my_string)
print("Original string:", my_string)
print("Sorted string (as list):", sorted_string)

## Sorting a dictionary (keys)
my_dict = {"c": 3, "a": 1, "b": 2}
sorted_dict_keys = sorted(my_dict)
print("Original dictionary:", my_dict)
print("Sorted dictionary keys:", sorted_dict_keys)

Este código demonstra como sorted() pode ser usado com diferentes tipos de dados. Ele ordena uma lista de strings alfabeticamente, ordena os caracteres em uma string e ordena as chaves de um dicionário.

Para executar o script, abra um terminal no VS Code (você pode encontrá-lo no painel inferior) e execute o seguinte comando:

python sort_tuple.py

Você deve ver a seguinte saída:

Original list: ['banana', 'apple', 'orange']
Sorted list: ['apple', 'banana', 'orange']
Original string: hello
Sorted string (as list): ['e', 'h', 'l', 'l', 'o']
Original dictionary: {'c': 3, 'a': 1, 'b': 2}
Sorted dictionary keys: ['a', 'b', 'c']

Observe que sorted() sempre retorna uma lista, independentemente do tipo de entrada. Se você precisar do resultado em um formato diferente, como uma tupla, você pode convertê-lo usando tuple(), como você aprendeu na etapa anterior.

Outra característica importante de sorted() é o parâmetro key. Este parâmetro permite que você especifique uma função que será usada para extrair uma chave de comparação de cada elemento no iterável. Isso é útil para ordenar objetos complexos com base em um atributo específico.

Por exemplo, vamos ordenar uma lista de tuplas com base no segundo elemento de cada tupla:

## Sorting a list of tuples based on the second element
tuple_list = [(1, 'z'), (2, 'a'), (3, 'b')]
sorted_tuple_list = sorted(tuple_list, key=lambda x: x[1])
print("Original list of tuples:", tuple_list)
print("Sorted list of tuples (by second element):", sorted_tuple_list)

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

python sort_tuple.py

A saída agora deve incluir:

Original list of tuples: [(1, 'z'), (2, 'a'), (3, 'b')]
Sorted list of tuples (by second element): [(2, 'a'), (3, 'b'), (1, 'z')]

Neste exemplo, a função lambda x: x[1] extrai o segundo elemento de cada tupla, e sorted() usa esses elementos para determinar a ordem das tuplas na lista ordenada.

Verificar com all() e zip()

Nesta etapa, você aprenderá como usar as funções all() e zip() em conjunto com tuplas ordenadas para realizar verificações e comparações mais avançadas.

A função all() é uma função embutida do Python que retorna True se todos os elementos de um iterável forem verdadeiros (ou se o iterável estiver vazio). Ela é frequentemente usada para verificar se uma condição é atendida para todos os elementos em uma sequência.

A função zip() é outra função embutida do Python que recebe vários iteráveis como argumentos e retorna um iterador de tuplas. Cada tupla contém os elementos correspondentes dos iteráveis de entrada. É útil para emparelhar elementos de diferentes sequências para comparação ou outras operações.

Vamos ver como essas funções podem ser usadas com tuplas ordenadas:

  1. Abra o editor VS Code no ambiente LabEx.
  2. Modifique o arquivo existente sort_tuple.py no diretório ~/project, ou crie-o se ele não existir.
  3. Copie e cole o seguinte código em sort_tuple.py:
## Checking if a tuple is sorted using all() and zip()
def is_sorted(data):
    ## zip(data, data[1:]) pairs consecutive elements
    ## all(x <= y for x, y in ...) checks if each pair is in ascending order
    return all(x <= y for x, y in zip(data, data[1:]))

my_tuple1 = (1, 2, 3, 4, 5)
my_tuple2 = (5, 2, 8, 1, 9)

print("Tuple 1:", my_tuple1, "is sorted:", is_sorted(my_tuple1))
print("Tuple 2:", my_tuple2, "is sorted:", is_sorted(my_tuple2))

Este código define uma função is_sorted() que verifica se uma determinada tupla está ordenada em ordem ascendente. Ele usa zip() para emparelhar elementos consecutivos da tupla e all() para verificar se cada par está em ordem ascendente.

Para executar o script, abra um terminal no VS Code (você pode encontrá-lo no painel inferior) e execute o seguinte comando:

python sort_tuple.py

Você deve ver a seguinte saída:

Tuple 1: (1, 2, 3, 4, 5) is sorted: True
Tuple 2: (5, 2, 8, 1, 9) is sorted: False

Como você pode ver, a função is_sorted() identifica corretamente se as tuplas estão ordenadas ou não.

Vamos estender este exemplo para verificar se duas tuplas são idênticas após a ordenação:

## Checking if two tuples are identical after sorting
def are_identical_after_sorting(tuple1, tuple2):
    return sorted(tuple1) == sorted(tuple2)

tuple_a = (3, 1, 4, 1, 5)
tuple_b = (1, 5, 1, 4, 3)
tuple_c = (1, 2, 3, 4, 5)

print("Tuple A:", tuple_a, "and Tuple B:", tuple_b, "are identical after sorting:", are_identical_after_sorting(tuple_a, tuple_b))
print("Tuple A:", tuple_a, "and Tuple C:", tuple_c, "are identical after sorting:", are_identical_after_sorting(tuple_a, tuple_c))

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

python sort_tuple.py

A saída agora deve incluir:

Tuple A: (3, 1, 4, 1, 5) and Tuple B: (1, 5, 1, 4, 3) are identical after sorting: True
Tuple A: (3, 1, 4, 1, 5) and Tuple C: (1, 2, 3, 4, 5) are identical after sorting: False

Neste exemplo, a função are_identical_after_sorting() verifica se duas tuplas contêm os mesmos elementos, independentemente de sua ordem original. Ele ordena ambas as tuplas e, em seguida, compara as listas ordenadas.

Resumo

Neste laboratório, você aprendeu sobre tuplas ordenadas em Python e como criá-las. Como as tuplas são imutáveis, você não pode ordená-las diretamente. Em vez disso, a função sorted() é usada para criar uma nova lista ordenada a partir dos elementos da tupla, que é então convertida de volta em uma tupla.

O laboratório demonstrou como ordenar uma tupla em ordem crescente usando sorted() e como visualizar as tuplas originais e ordenadas usando instruções de impressão. O laboratório também mencionou a possibilidade de ordenar em ordem decrescente usando o parâmetro reverse, embora o código completo para isso tenha sido truncado.