如何对数字进行排序?

2024-05-17 11:35:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Python编写一个简单的脚本,它接受一个数字并保存在一个变量中,将数字按升序和降序排序,并将两者保存在单独的变量中。实现Kaprekar's constant

这可能是一个很愚蠢的问题。但我是新手,在谷歌上找不到任何可以帮助我的东西。我发现的一个网站试图用列表来解释一种方法,但效果不太好。


Tags: 方法脚本列表排序网站数字constant效果
3条回答
>>> 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]

正如许多其他人所指出的,您可以将一个数字向前排序如下:

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

这几乎是最标准的方法。

倒数?在带有尾随零的数字中不起作用。

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

[::-1]表示法表示iterable将以相反的顺序遍历。

正如Mark Rushakoff在他的回答中已经提到(但没有解决)的那样,str(n)不处理带前导零的数字n,这是Kaprekar's operation所需要的。hughdbrown的答案同样不适用于前导零。

确保有四个字符串的一种方法是使用zfill字符串方法。例如:

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

您还应该注意,在3之前的Python版本中,数字文本中的前导零表示八进制:

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

在Python 3中,0043根本不是有效的数字文本。

按升序和降序对数字进行排序:

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

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

像这样:

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

如果您需要它们再次成为数字(不仅仅是字符串),请对它们调用int()

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

相关问题 更多 >