Jak mogę posortować wyrażenie matematyczne takie:

s = "1+3+2+1+4+3+5+16+63+3"

Do pożądanego:

s = "1+1+2+3+3+3+4+5+16+63"

W Python3?

0
FarZad AsG 5 czerwiec 2018, 11:42

3 odpowiedzi

Najlepsza odpowiedź

Ponieważ twoje wyrażenie jest ciągiem. Najpierw musisz wyodrębnić numery z ciągu i manipulować: numerami sortowania -> Konwersja do ciągów

>>> s = "1+3+2+1+4+3+5+16+63+3"
>>> chars = s.split('+')
>>> numbers = list(map(int, chars))
>>> sorted_numbers = sorted(numbers)
>>> "+".join(list(map(str,sorted_numbers)))
'1+1+2+3+3+3+4+5+16+63'
4
Sijan Bhandari 5 czerwiec 2018, 09:15
'+'.join(str(x) for x in sorted([int(x) for x in s.split('+')]))

Nie jestem pewien, czy możliwe są dalsze optymalizacje.

0
ravi 5 czerwiec 2018, 08:51

Aby obsługiwać liczby z typem pływaka, użyj tego:

Python 3.6.5 (default, Apr  1 2018, 05:46:30)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.4.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from decimal import Decimal

In [2]: s = "1+3+2+1+4+3+5+16+63.5+3"

In [3]: nums = [Decimal(i) for i in s.replace(' ', '').split('+')]

In [4]: d = 's = ' + '+'.join(str(i) for i in sorted(nums))

In [5]: d
Out[5]: 's = 1+1+2+3+3+3+4+5+16+63.5'
1
Waket Zheng 5 czerwiec 2018, 09:27