Як сортувати букви в рядку в алфавітному порядку на Python


157

Чи існує простий спосіб сортування букв по рядку в алфавітному порядку на Python?

Отже для:

a = 'ZENOVW'

Я хотів би повернутися:

'ENOVWZ'

Відповіді:


276

Ви можете зробити:

>>> a = 'ZENOVW'
>>> ''.join(sorted(a))
'ENOVWZ'

Зверніть увагу, що sorted(a)повернеться відсортований список, тому для порівняння рядків вам не потрібно join()(див. Відповідь askewchan нижче).
Skippy le Grand Gourou

Зауважте, що ''.join(sorted(a, reverse=True, key=str.lower))їх можна використовувати для зворотного сортування, нечутливого до регістру. Може бути корисним.
Superdooperhero

89
>>> a = 'ZENOVW'
>>> b = sorted(a)
>>> print b
['E', 'N', 'O', 'V', 'W', 'Z']

sortedповертає список, тож ви можете зробити його знову рядком, використовуючи join:

>>> c = ''.join(b)

яка об'єднує елементи bразом із порожнім рядком ''між кожним елементом.

>>> print c
'ENOVWZ'

31

Розроблене () рішення може дати вам несподівані результати з іншими рядками.

Список інших рішень:

Сортуйте літери та виділіть їх:

>>> s = "Bubble Bobble"
>>> ''.join(sorted(set(s.lower())))
' belou'

Сортуйте літери та зробіть їх чіткими, зберігаючи шапки:

>>> s = "Bubble Bobble"
>>> ''.join(sorted(set(s)))
' Bbelou'

Сортуйте літери та зберігайте дублікати:

>>> s = "Bubble Bobble"
>>> ''.join(sorted(s))
' BBbbbbeellou'

Якщо ви хочете позбутися місця в результаті, додайте функцію strip () у будь-якому з цих згаданих випадків:

>>> s = "Bubble Bobble"
>>> ''.join(sorted(set(s.lower()))).strip()
'belou'

Гей, це перше рішення було якось корисним для домашнього завдання, в якому я повинен був знайти лист за допомогою бісекції. Так, я вже знаю про клас струн та метод find (), але це перемагає мету вправи;)
runlevel0

9

Ви можете використовувати зменшити

>>> a = 'ZENOVW'
>>> reduce(lambda x,y: x+y, sorted(a))
'ENOVWZ'

7

Функція Python sortedповертає результат ASCII для рядка.

НЕПРАВИЛЬНО : У прикладі, наведеному нижче eі dпозаду , Hі Wз - за його зі значенням ASCII.

>>>a = "Hello World!"
>>>"".join(sorted(a))
' !!HWdellloor'

ПРАВИЛЬНО : Для того, щоб записати відсортований рядок без зміни великої літери. Використовуйте код:

>>> a = "Hello World!"
>>> "".join(sorted(a,key=lambda x:x.lower()))
' !deHllloorW'

Якщо ви хочете видалити всі розділові знаки та цифри. Використовуйте код:

>>> a = "Hello World!"
>>> "".join(filter(lambda x:x.isalpha(), sorted(a,key=lambda x:x.lower())))
'deHllloorW'

3

код може бути використаний для сортування рядків в алфавітному порядку без використання вбудованої функції python

k = вхід ("Знову введіть будь-який рядок")

li = []
x = len(k)
for i in range (0,x):
    li.append(k[i])

print("List is : ",li)


for i in range(0,x):
    for j in range(0,x):
        if li[i]<li[j]:
            temp = li[i]
            li[i]=li[j]
            li[j]=temp
j=""

for i in range(0,x):
    j = j+li[i]

print("After sorting String is : ",j)

1
В ідеалі ви хочете додати деякі пояснення до коду, щоб зрозуміти, що він робить. Ласкаво просимо до SO!
geisterfurz007

1

Дуже сподобалась відповідь за допомогою функції redu (). Ось ще один спосіб сортування рядка за допомогоюumule ().

from itertools import accumulate
s = 'mississippi'
print(tuple(accumulate(sorted(s)))[-1])

сортував (-ла) -> ['i', 'i', 'i', 'i', 'm', 'p', 'p', 's', 's', 's', 's' ]

кортеж (накопичувати (сортувати)) -> ('i', 'ii', 'iii', 'iiii', 'iiiim', 'iiiimp', 'iiiimpp', 'iiiimpps', 'iiiimppss', 'iiiimppsss ',' iiiimppssss ')

Вибираємо останній індекс (-1) кортежу


Молодці за вашу першу відповідь. Просто врахуйте рядок в 1 мільйон символів, ваша команда tuple () створить величезний список накопичених параметрів, який використовує зайво великий обсяг пам'яті.
tda

Домовились. Отже, для поліпшення простору простору ідея полягає в роботі з самим ітерабельним, встановленим для перетворення його в структуру даних. Приємно. Спасибі.
Моно
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.