Saltar al contenido

¿Cómo ordenar los dígitos en un número?

Esta cuestión se puede tratar de diversas maneras, sin embargo te dejamos la que para nosotros es la resolución más completa.

Solución:

Ordena los dígitos en orden ascendente y descendente:

ascending = "".join(sorted(str(number)))

descending = "".join(sorted(str(number), reverse=True))

Me gusta esto:

>>> number = 5896
>>> ascending = "".join(sorted(str(number)))
>>>
>>> descending = "".join(sorted(str(number), reverse=True))
>>> ascending
'5689'
>>> descending
'9865'

Y si necesita que vuelvan a ser números (no solo cadenas), llame int() en ellos:

>>> int(ascending)
5689
>>> int(descending)
9865

2020-01-30

>>> def kaprekar(number):
...     diff = None
...     while diff != 0:
...         ascending = "".join(sorted(str(number)))
...         descending = "".join(sorted(str(number), reverse=True))
...         print(ascending, descending)
...         next_number = int(descending) - int(ascending)
...         diff = number - next_number
...         number = next_number
...
>>> kaprekar(2777)
2777 7772
4599 9954
3555 5553
1899 9981
0288 8820
2358 8532
1467 7641

>>> x = [4,5,81,5,28958,28] # first list
>>> print sorted(x)
[4, 5, 5, 28, 81, 28958]
>>> x
[4, 5, 81, 5, 28958, 28]
>>> x.sort() # sort the list in place
>>> x
[4, 5, 5, 28, 81, 28958]
>>> x.append(1) # add to the list
>>> x
[4, 5, 5, 28, 81, 28958, 1]
>>> sorted(x)
[1, 4, 5, 5, 28, 81, 28958]

Como muchos otros han señalado, puede ordenar un número hacia adelante como:

>>> int(''.join(sorted(str(2314))))
1234

Esa es más o menos la forma más estándar.

¿Invertir un número? No funciona bien en un número con ceros al final.

>>> y = int(''.join(sorted(str(2314))))
>>> y
1234
>>> int(str(y)[::-1])
4321

los [::-1] La notación indica que el iterable debe recorrerse en orden inverso.

Como Mark Rushakoff ya mencionó (pero no resolvió) en su respuesta, str(n) no maneja numérico n con ceros a la izquierda, que necesita para la operación de Kaprekar. la respuesta de hughdbrown tampoco funciona con ceros a la izquierda.

Una forma de asegurarse de que tiene un texto de cuatro caracteres string es usar el zfill string método. Por ejemplo:

>>> n = 2
>>> str(n)
'2'
>>> str(n).zfill(4)
'0002'

También debe tener en cuenta que en las versiones de Python anteriores a la 3, un cero inicial en un literal numérico indicaba octal:

>>> str(0043)
'35'
>>> str(0378)
  File "", line 1
    str(0378)
           ^
SyntaxError: invalid token

En Python 3, 0043 no es un literal numérico válido en absoluto.

Reseñas y puntuaciones de la guía

Ten en cuenta difundir este escrito si te valió la pena.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *