Dan Cm 0 Denunciar post Postado Outubro 14, 2012 Eu tentei da seguinte forma, mas acho que não deve ser recomendável em questão de desempenho. #-*- coding: utf-8 -*- lista = [3, 0, 0, 0, 1, 1, 1, 0, 3, 3, 3] total = [] contagem = [] for ocorrencia in lista: if total.count(ocorrencia) == 0: total.append(ocorrencia) contagem.append(lista.count(ocorrencia)) print total print contagem Saída: Essa é uma forma razoável de se contar os números? Qual seria a melhor? puts, postei na categoria errada :wacko: . É em Python isso. Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Outubro 17, 2012 A maneira mais "pythonica" que eu conheço é essa: lista = [3, 0, 0, 0, 1, 1, 1, 0, 3, 3, 3] print {x:lista.count(x) for x in set(lista)} A última linha usa o tipo set (conjunto) p/ eliminar os elementos repetidos e coloca tudo num dict comprehension. Compartilhar este post Link para o post Compartilhar em outros sites
Dan Cm 0 Denunciar post Postado Outubro 18, 2012 Eu não imaginava que isso poderia ser feito de forma tão simples. Ainda não entendi bem isso de comprehension, mas vou pesquisar mais. Obrigado. :D Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Outubro 18, 2012 Só mais uma coisa... Você pode medir o tempo de execução com o comando python -m cProfile programa.py. Isso serve p/ você "tirar a prova dos 9" se estiver vendo discussões sobre o que é mais rápido na linguagem. Mas tenha em mente que otimização prematura é a raiz de todo o mal. Compartilhar este post Link para o post Compartilhar em outros sites
Dan Cm 0 Denunciar post Postado Outubro 19, 2012 Muito obrigado pelas informações, com certeza elas serão muito úteis. :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
guidjos 65 Denunciar post Postado Outubro 19, 2012 Segue outra solução, desta vez em Haskell: Se houver relação de ordem entre os elementos da lista sendo processada, você pode usar: import Data.Listcount :: (Eq a, Ord a) => [a] -> [(a, Int)]count = map wrap . group . sort where wrap g = (head g, length g) Senão, pode usar esta solução que, apesar de menos elegante, não precisa da restrição Ord a: increment :: (Eq a) => [(a, Int)] -> a -> [(a, Int)]increment counts elt | lookup elt counts == Nothing = (elt, 1) : counts | otherwise = map incIfTarget counts where incIfTarget (x, count) | x == elt = (x, count + 1) | otherwise = (x, count)count :: (Eq a) => [a] -> [(a, Int)]count = foldl increment [] Compartilhar este post Link para o post Compartilhar em outros sites