Как отсортировать цифры в номере? - PullRequest
5 голосов
/ 19 августа 2009

Я пытаюсь сделать простой скрипт на Python, который принимает число и сохраняет переменную, сортируя цифры в порядке возрастания и убывания и сохраняя обе в отдельных переменных. Реализация константы Капрекара .

Это, наверное, довольно нубистский вопрос. Но я новичок в этом и не смог найти в Google ничего, что могло бы мне помочь. Сайт, который я нашел, пытался объяснить способ использования списков, но он не очень хорошо работал.

Ответы [ 5 ]

12 голосов
/ 19 августа 2009

Сортировка цифр в порядке возрастания и убывания:

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
3 голосов
/ 19 августа 2009
>>> 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] указывает на то, что итерация должна проходиться в обратном порядке.

2 голосов
/ 20 августа 2009

Как уже упоминал (но не решил) Марк Рушаков в своем ответе, str(n) не обрабатывает числовое значение n с ведущими нулями, которое необходимо для операции Капрекара . Ответ hughdbrown также не работает с ведущими нулями.

Один из способов убедиться, что у вас есть четырехсимвольная строка, - это использовать 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 вообще не является допустимым числовым литералом.

1 голос
/ 19 августа 2009

Я не знаю синтаксиса python, но, если подумать, я бы преобразовал входную строку в массив символов, они выполняют сортировку по массиву символов и, наконец, передают ее по конвейеру.

0 голосов
/ 27 августа 2009

Вот ответ на заглавный вопрос в Perl с уклоном в сторону сортировки 4-значных чисел для алгоритма Капрекара. В этом примере замените «shift» на число для сортировки. Он сортирует цифры по 4-значному числу с ведущими 0 ($ 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)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...