簡體   English   中英

如何對數字中的數字進行排序?

[英]How to sort digits in a number?

我正在嘗試在 Python 中制作一個簡單的腳本,它接受一個數字並保存在一個變量中,按升序和降序對數字進行排序並將兩者保存在單獨的變量中。 實現Kaprekar 的常數

這可能是一個非常菜鳥的問題。 但我是新手,我在谷歌上找不到任何可以幫助我的東西。 我發現的一個網站試圖解釋使用列表的方法,但效果不佳。

按升序和降序對數字進行排序:

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

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]

正如許多其他人指出的那樣,您可以對數字進行排序,例如:

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

這幾乎是最標准的方式。

反轉一個數字? 在帶有尾隨零的數字中效果不佳。

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

[::-1]表示法表示以相反的順序遍歷可迭代對象。

正如 Mark Rushakoff 在他的回答中已經提到(但沒有解決)的那樣, str(n)不處理帶有前導零的數字n ,這是Kaprekar 的操作所需要 休德布朗的回答同樣不適用於前導零。

確保您擁有四字符字符串的一種方法是使用zfill字符串方法。 例如:

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

您還應該知道,在 Python 3 之前的版本中,數字文字中的前導零表示八進制:

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

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

我不知道 python 語法,但一般認為,我會將輸入字符串轉換為字符數組,他們對字符數組進行排序,最后將其輸出。

這是 Perl 中標題問題的答案,偏向於為 Kaprekar 算法排序 4 位數字。 在示例中,將 'shift' 替換為要排序的數字。 它對前導 0 的 4 位數字中的數字進行排序($asc 按升序排序,$dec 降序),並輸出前導為 0 的數字:

my $num = sprintf("%04d", shift);
my $asc = sprintf("%04d", join('', sort {$a <=> $b} split('', $num)));
my $dec = sprintf("%04d", join('', sort {$b <=> $a} split('', $num)));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM