Python classificado ()

A função Sorted () retorna uma lista classificada dos itens em um iterável.

A sorted()função classifica os elementos de um determinado iterável em uma ordem específica ( crescente ou decrescente ) e retorna o iterável classificado como uma lista.

A sintaxe da sorted()função é:

 classificado (iterável, chave = Nenhum, reverso = Falso)

Parâmetros para a função classificada ()

sorted() pode ter no máximo três parâmetros:

  • iterável - Uma sequência (string, tupla, lista) ou coleção (conjunto, dicionário, conjunto congelado) ou qualquer outro iterador.
  • reverso (opcional) - se True, a lista classificada é invertida (ou classificada em ordem decrescente). O padrão é Falsese não fornecido.
  • key (opcional) - uma função que serve como uma chave para a comparação de classificação. O padrão é None.

Exemplo 1: classificar string, lista e tupla

 # vowels list py_list = ('e', 'a', 'u', 'o', 'i') print(sorted(py_list)) # string py_string = 'Python' print(sorted(py_string)) # vowels tuple py_tuple = ('e', 'a', 'u', 'o', 'i') print(sorted(py_tuple))

Resultado

 ('a', 'e', ​​'i', 'o', 'u') ('P', 'h', 'n', 'o', 't', 'y') ('a' , 'e', ​​'i', 'o', 'u')

Observe que em todos os casos uma lista classificada é retornada.

Nota: Uma lista também possui o método sort (), que funciona da mesma maneira que sorted(). A única diferença é que o sort()método não retorna nenhum valor e altera a lista original.

Exemplo 2: classificar em ordem decrescente

A sorted()função aceita um reverseparâmetro como argumento opcional.

Setting reverse = Trueclassifica o iterável em ordem decrescente.

 # set py_set = ('e', 'a', 'u', 'o', 'i') print(sorted(py_set, reverse=True)) # dictionary py_dict = ('e': 1, 'a': 2, 'u': 3, 'o': 4, 'i': 5) print(sorted(py_dict, reverse=True)) # frozen set frozen_set = frozenset(('e', 'a', 'u', 'o', 'i')) print(sorted(frozen_set, reverse=True))

Resultado

 ('u', 'o', 'i', 'e', ​​'a') ('u', 'o', 'i', 'e', ​​'a') ('u', 'o' , 'i', 'e', ​​'a')

Parâmetro chave na função Python Sorted ()

Se você deseja sua própria implementação para classificação, sorted()também aceita uma keyfunção como um parâmetro opcional.

Com base no valor retornado da função-chave, você pode classificar o iterável fornecido.

 classificado (iterável, chave = len)

Aqui len()está a função embutida do Python para contar o comprimento de um objeto.

A lista é classificada com base no comprimento do elemento, da contagem mais baixa para a mais alta.

Exemplo 3: classificar a lista usando Sort () com uma função chave

 # take the second element for sort def take_second(elem): return elem(1) # random list random = ((2, 2), (3, 4), (4, 1), (1, 3)) # sort list with key sorted_list = sorted(random, key=take_second) # print list print('Sorted list:', sorted_list)

Resultado

 Lista ordenada: ((4, 1), (2, 2), (1, 3), (3, 4))

Exemplo 4: classificação com várias chaves

Vamos supor que temos a seguinte lista:

 # Nested list of student's info in a Science Olympiad # List elements: (Student's Name, Marks out of 100, Age) participant_list = ( ('Alison', 50, 18), ('Terence', 75, 12), ('David', 75, 20), ('Jimmy', 90, 22), ('John', 45, 12) )

Queremos ordenar a lista de forma que o aluno com as notas mais altas esteja no início. Caso os alunos tenham notas iguais, eles devem ser ordenados de forma que o participante mais jovem fique em primeiro lugar.

Podemos obter esse tipo de classificação com várias chaves, retornando tupla em vez de um número.

Duas tuplas podem ser comparadas comparando seus elementos começando da primeira. Se houver um empate (os elementos são iguais), o segundo elemento é comparado e assim por diante.

 >>> (1,3)> (1, 4) False >>> (1, 4) >> (1, 4, 1) < (2, 1) True

Vamos usar essa lógica para construir nossa lógica de classificação.

 # Nested list of student's info in a Science Olympiad # List elements: (Student's Name, Marks out of 100 , Age) participant_list = ( ('Alison', 50, 18), ('Terence', 75, 12), ('David', 75, 20), ('Jimmy', 90, 22), ('John', 45, 12) ) def sorter(item): # Since highest marks first, least error = most marks error = 100 - item(1) age = item(2) return (error, age) sorted_list = sorted(participant_list, key=sorter) print(sorted_list)

Resultado

 (('Jimmy', 90, 22), ('Terence', 75, 12), ('David', 75, 20), ('Alison', 50, 18), ('John', 45, 12) )

Como a função lógica de classificação é pequena e cabe em uma linha, a lambdafunção é usada internamente, em keyvez de passar um nome de função separado.

O programa acima pode ser escrito usando a lambdafunção da seguinte maneira:

 # Nested list of student's info in a Science Olympiad # List elements: (Student's Name, Marks out of 100 , Age) participant_list = ( ('Alison', 50, 18), ('Terence', 75, 12), ('David', 75, 20), ('Jimmy', 90, 22), ('John', 45, 12) ) sorted_list = sorted(participant_list, key=lambda item: (100-item(1), item(2))) print(sorted_list)

Resultado

 (('Jimmy', 90, 22), ('Terence', 75, 12), ('David', 75, 20), ('Alison', 50, 18), ('John', 45, 12) )

Para saber mais sobre funções lambda, visite Python Lambda Functions.

Artigos interessantes...