fork download
  1. from collections import Counter
  2.  
  3. def com_list_count(vals): # uma das respostas
  4. uniques = [i for i in vals if vals.count(i) < 2] # lista de todos os valores unicos de vals
  5. return max(uniques), min(uniques)
  6.  
  7. def com_list_count2(lista): # outra resposta
  8. listaSemRepetidos = []
  9. for i in range(len(lista)):
  10. if lista.count(lista[i]) == 1:
  11. listaSemRepetidos.append(lista[i])
  12. if listaSemRepetidos == []:
  13. return None, None
  14. else:
  15. return max(listaSemRepetidos), min(listaSemRepetidos)
  16.  
  17. def com_counter(vals): # solução sugerida com Counter e um único loop em vez de usar min e max
  18. c = Counter(vals)
  19. menor, maior = float('inf'), float('-inf')
  20. for n, qtd in c.items():
  21. if qtd == 1:
  22. if n > maior:
  23. maior = n
  24. if n < menor:
  25. menor = n
  26. return maior, menor
  27.  
  28. from random import choices
  29. # gerar uma lista com 10 mil números
  30. # usar intervalo entre 10 e 999 para ter vários números repetidos
  31. vals = choices(range(10, 1000), k=10000)
  32. # adicionar números únicos (que não se repetem)
  33. vals.extend([8, 2500, 3230, 4])
  34.  
  35. from timeit import timeit
  36.  
  37. # executa 1 vez cada teste (5 vezes estourou o limite de tempo)
  38. params = { 'number' : 1, 'globals': globals() }
  39.  
  40. print(timeit('com_list_count(vals)', **params))
  41. print(timeit('com_list_count2(vals)', **params))
  42. print(timeit('com_counter(vals)', **params))
  43.  
Success #stdin #stdout 3.16s 12576KB
stdin
Standard input is empty
stdout
1.5656831511296332
1.5717760920524597
0.0011110720224678516