Étant donné une liste, je dois imprimer les nombres dans l'ordre trié et supprimer les doublons. J'utilise python 3.7.2
Mon code:
def sorted_elements(numbers):
return sorted(set(numbers))
testcase = int(input())
while testcase > 0:
numbers = input().split()
l = sorted_elements(numbers)
for x in l:
print (x, end = ' ')
print ()
testcase -= 1
Cependant, chaque fois que mon entrée se compose d'un nombre à 2 chiffres, la logique échoue .
Par exemple. pour l'entrée de 2 1 43 2 5 , j'obtiens une sortie de 1 2 43 5 .
Cela fonctionne parfaitement pour les nombres à un chiffre. Quelqu'un peut-il m'aider?
5 Réponses :
Vous n'avez besoin que d'une légère modification. Vous comparez des chaînes au lieu de nombres, alors essayez plutôt ceci:
numbers = (int(x) for x in input().split())
Si vous le souhaitez, vous pouvez également faire:
def sorted_elements(numbers):
return sorted(set(numbers))
testcase = int(input())
while testcase > 0:
numbers = map(int, input().split())
l = sorted_elements(numbers)
for x in l:
print (x, end = ' ')
print ()
testcase -= 1
ce sont des questions de devoirs sans trop d'effort - je les évite généralement - elles sont finalement supprimées de toute façon. 1 ligne: print ('' .join (trié (set (map (int, input (). Split ())))))
@PatrickArtner C'est vrai que cela peut se faire facilement en une seule ligne, mais je voulais faire le moins de modifications possible au code d'OP.
Vous allez dans le bon sens avec set (nombres) pour supprimer les doublons. Le problème vient du trié avec vos numéros étant une liste de str qui ne sont pas des int s.
Essayez ceci :
x_numbers = input().split() numbers = [int(x) for x in x_numbers]
@PatrickArtner Ne voyez-vous pas return sorted (set (nombres)) dans la question du PO?
Il n'était pas clair pour moi que vous lui disiez d'utiliser vos numéros à la place dans son code, j'ai donc jugé la réponse incomplète en réponse à Suppression des doublons et tri de la liste python - merci d'avoir ajouté un certain contexte.
Vous pouvez simplifier cela sous plusieurs aspects. Triez par valeur numérique en utilisant une fonction clé appropriée, utilisez une boucle for si vous connaissez le nombre d'itérations au préalable, utilisez des utilitaires de chaîne appropriés comme str.join , etc.
testcases = int(input())
for _ in range(testcases):
print(' '.join(sorted(set(input().split()), key=int)))
Nous pouvons faire simple comme ça. Ceci est une référence
input=raw_input() #took input as string inputlist=input.split() #split the string to list lsintegers = map(int, list(set(inputlist))) #remove duplicates converted each element to integer lsintegers.sort() #sorted print(lsintegers)`
Essayez-le maintenant:
testcase = int(input())
n=list(str(testcase))
results = map(int, n)
numbers= sorted(set(results))
print(numbers)
code ici: https: // repl .it / repls / SeriousRosybrownApplicationprogrammer
nombres est une liste de chaînes le convertit en entier,
nombres = map (int, input (). split ())@PatrickArtner Oui, j'ai eu des problèmes lorsque j'ai collé le code. Quoi qu'il en soit, il a été édité et une IndentationError ne devrait pas apparaître.