Nous avons été chargés de créer une fonction lambda pour trier une liste de nombres à virgule flottante par la valeur du premier chiffre décimal. Les éléments avec le même premier chiffre décimal doivent être triés par ordre croissant.
Par exemple:
f1 = lambda x: x - int(x)
La sortie doit être
[46.0865, 16.1436, 45.2133, 50.2441, 2.3048, 53.6323, 21.742, 58.7235, 80.7795, 15.9621]
3 Réponses :
Vous pouvez utiliser lambda suivant comme clé pour sort:
l = [45.2133, 80.7795, 2.3048, 50.2441, 16.1436, 53.6323, 21.742, 15.9621, 46.0865, 58.7235]
l.sort(key=lambda x: (int(str(x).split('.')[1][0]), x))
print(l)
# [46.0865, 16.1436, 45.2133, 50.2441, 2.3048, 53.6323, 21.742, 58.7235, 80.7795, 15.9621]
Code : p >
lambda x: (int(str(x).split('.')[1][0]), x)
qui trie par le premier chiffre décimal et par la valeur en cas d'égalité.
Cela résoudra votre problème, sans avoir à convertir le type de X.
l = [45.2133, 80.7795, 2.3048, 50.2441, 16.1436, 53.6323, 21.742, 15.9621, 46.0865, 58.7235] l.sort(key=lambda x: ((x % 1), x)) print(l)
from math import floor f1 = lambda x: (math.floor((x - math.floor(x)) * 10),x) Credits to a friend of mine for the computational suggestion.
Je ne sais pas ce que signifie «nous ne pouvons pas utiliser de fonctions, seulement des modules». Mais ce code fait un tri par le premier chiffre décimal, donc ce que vous demandez n'est pas clair.
Le code que vous avez donné trie correctement les nombres en fonction de la partie après la virgule décimale. Les seuls numéros qui ne sont pas dans l'ordre que vous avez donné sont 21.742 et 58.7235, qui sont triés avec
.7235avant.742.À côté du point, mais un lambda nommé est une mauvaise pratique. Les lambdas sont censés être anonymes. Écrivez plutôt un
def. Selon PEP8 , "Toujours utiliser une def instruction au lieu d'une instruction d'affectation qui lie une expression lambda directement à un identifiant. " BTW bienvenue dans Stack Overflow! Consultez la visite .