Te dan una serie de números. Imprime el elemento menos presente. Si hay más de 1 elemento, imprímalos todos en orden decreciente de su valor.

Entrada:

[9, 1, 6, 4, 56, 56, 56, 6, 4, 2]

Salida:

[9, 2, 1]

En realidad obtuve resultados pero no ejecuto casos privados, por favor, ayúdenme.

  from collections import Counter
n=int(input())
ans=""
list1=[]
list2=[]
list1=[int(x) for x in input().strip().split()][:n]
dict1=dict(Counter(list1))
k=min(dict1,key=dict1.get)
l=dict1[k]

for i,j in dict1.items():
  if(j==l):
    list2.append(i)

list2.reverse()
for i in list2:
  ans+=str(i)+' '

print(ans[:-1])
3
Gvs Saisumanth 9 oct. 2019 a las 15:30

4 respuestas

La mejor respuesta

Veo muchas respuestas complicadas. En realidad, se puede hacer simplemente usando la comprensión de la lista sobre los elementos en la instancia de Counter():

>>> from collections import Counter
>>> count = Counter([9, 1, 6, 4, 56, 56, 56, 6, 4, 2])
>>> values = [key for key, value in count.items() if value == min(count.values())]
>>> values.sort(reverse=True)  # [9, 2, 1]
1
Arno Maeckelberghe 9 oct. 2019 a las 13:09

La razón por la que obtiene un error es porque Counter / Dictionary es una colección desordenada. Por lo tanto, su lista2 podría tener elementos en un orden diferente cada vez que lo ejecute. Intente ejecutar su código para la entrada [9, 1, 6, 4, 56, 6, 4, 2].

from collections import Counter
n=int(input())

list1=[]
list2=[]
list1=[int(x) for x in input().strip().split()][:n]

dict1=dict(Counter(list1))
k=min(dict1,key=dict1.get)
l=dict1[k]

for i,j in dict1.items():
  if(j==l):
    list2.append(i)

list2.sort(reverse=True)    
print(' '.join(str(i) for i in list2))
0
Shikhar Tandon 9 oct. 2019 a las 12:56

Sin importar nada, también puedes probar

def getAllindex(lst, elem):
     return list(filter(lambda a: lst[a] == elem, range(0,len(lst))))

lst = [9, 1, 6, 4, 56, 56, 56, 6, 4, 2]

list_count = [lst.count(xx) for xx in lst]
idx = getAllindex(list_count, min(list_count))

l = list(set([lst[ii] for ii in idx]))
l.sort(reverse = True)
print(l)

Salida

[9, 2, 1]
0
Stefano 9 oct. 2019 a las 13:05

Puede hacerlo simplemente ordenando la lista antes de revertirla. y no necesita crear una cadena para la lista. simplemente * list_name e imprimirá la lista usando espacios.

from collections import Counter

n=int(input())
list1=[]
list2=[]
list1=[int(x) for x in input().strip().split()][:n]
dict1=dict(Counter(list1))


k=min(dict1,key=dict1.get)

l=dict1[k]

for i,j in dict1.items():
if(j==l):
list2.append(i)

list2.sort(reverse=True)

print(*list2)
0
Tommyst001 9 oct. 2019 a las 13:32
58304187