Tenho uma lista de inteiros com duplicatas e preciso classificá-la pelo número dessas duplicatas.
Por exemplo:
input: n = [2, 4, 1, 2]
output: n = [4, 1, 2, 2]
Eu escrevi um código e notei que sort() não altera a lista. Mas se eu tentar usar sorted() com o mesmo argumento de chave, então funciona perfeitamente. Qual é a razão por trás disso?
Meu código:
nums = [2, 4, 1, 2]
nums.sort(key = lambda x: nums.count(x))
print(nums)
Ele pode ser conectado ao método sort() usando o algoritmo in-loco?
Ao contrário de
sorted
, olist.sort
método classifica uma lista no local, durante o qual a lista fica em um estado intermediário em que não há integridade em sua estrutura de dados interna para que os outros métodos possam ler.Como uma função-chave para o
sort
método é chamada durante uma classificação, sua chamada docount
método da mesma lista na função-chave não retorna a contagem de um determinado item como você espera, o que pode ser visto com uma função wrapper:as saídas acima:
o que explica por que a lista permanece na mesma ordem, já que a chave para cada item acaba sendo o mesmo valor de 0 e já que o algoritmo de classificação usado é estável.
A documentação também observa
list.sort
:Portanto, a implementação do CPython faz com que a lista pareça vazia durante uma classificação, o que explica por que
list.count
retorna 0 quando chamado de uma função-chave.