1
resposta

[Dúvida] ordenação de listas em python

Depois de assistir o curso de coleções em python fui ler um artigo de ordenação de listas. https://www.alura.com.br/artigos/ordenando-listas-no-python e lá o instrutor fala pra ordenarmos a lista pelo nome, ai eu queria saber se tem alguam diferença muito grande em definir na hora da ordenação como ele fez ou se da pra colocar direto na classe sem problemas.

Meu código:

class Produto(object): 
  def __init__(self, nome, valor): 
    self.__nome = nome 
    self.__valor = valor 

  def __repr__(self): 
    return "nome:%s , valor:%s" % (self.__nome, self.__valor)

  def get_nome(self): 
    return self.__nome

  def get_valor(self): 
    return self.__valor
  def __lt__(self, other):
    return self.__nome < other.__nome

palavras = ['chocolate', 'biscoito', 'cafe', 'suco', 'feijao', 'arroz'] 
numeros = [3.45,2.49,3.45,4.3,10.0,8.5]
count = 0
precos =[]
for i in range(len(palavras)):
    precos.append(Produto(palavras[count],numeros[count]))
    count +=1

for preco in sorted(precos):
  print(preco)
1 resposta

Olá Guilherme!

Na sua pergunta, você questiona se há diferença em definir a ordenação na hora da ordenação ou na classe. A resposta é que não há diferença significativa, mas definir na classe pode ser mais organizado e facilitar a manutenção do código.

No seu código, você já definiu a ordenação na classe Produto utilizando o método especial __lt__, que compara o nome dos produtos. Dessa forma, quando você utiliza a função sorted na lista de produtos, a ordenação é feita automaticamente pelo nome.

Porém, se você quisesse ordenar por outro atributo, como o valor, seria necessário modificar a classe e o método __lt__. Por isso, definir a ordenação na classe pode ser mais prático e organizado, pois todas as informações de ordenação ficam em um só lugar.

Espero ter ajudado e bons estudos!