Cara mengurutkan huruf dalam string sesuai abjad dengan Python

157

Apakah ada cara mudah untuk mengurutkan huruf dalam string berdasarkan abjad dengan Python?

Sehingga untuk:

a = 'ZENOVW'

Saya ingin kembali:

'ENOVWZ'
Superdooperhero
sumber

Jawaban:

276

Anda dapat melakukan:

>>> a = 'ZENOVW'
>>> ''.join(sorted(a))
'ENOVWZ'
KZ
sumber
Catatan yang sorted(a)akan mengembalikan daftar yang diurutkan, jadi untuk perbandingan string Anda tidak perlu join()(lihat jawaban askewchan di bawah).
Skippy le Grand Gourou
Catatan yang ''.join(sorted(a, reverse=True, key=str.lower))dapat digunakan untuk melakukan jenis case-insensitive terbalik. Bisa jadi berguna.
Superdooperhero
89
>>> a = 'ZENOVW'
>>> b = sorted(a)
>>> print b
['E', 'N', 'O', 'V', 'W', 'Z']

sortedmengembalikan daftar, sehingga Anda dapat membuatnya menjadi string lagi menggunakan join:

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

yang menggabungkan item bbersama dengan string kosong ''di antara setiap item.

>>> print c
'ENOVWZ'
askewchan
sumber
31

Solusi Sorted () dapat memberi Anda beberapa hasil yang tidak terduga dengan string lainnya.

Daftar solusi lain:

Mengurutkan huruf dan membuatnya berbeda:

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

Mengurutkan huruf dan membuatnya berbeda sambil menyimpan huruf besar:

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

Sortir huruf dan simpan duplikat:

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

Jika Anda ingin menghilangkan ruang di hasilnya, tambahkan fungsi strip () dalam salah satu dari kasus yang disebutkan:

>>> s = "Bubble Bobble"
>>> ''.join(sorted(set(s.lower()))).strip()
'belou'
Radek
sumber
Hei, solusi pertama itu agak berguna untuk pekerjaan rumah di mana saya harus menemukan surat menggunakan pembelahan dua. Ya, saya sudah tahu tentang kelas string dan metode find (), tetapi ini mengalahkan tujuan latihan;)
runlevel0
9

Anda bisa menggunakan pengurangan

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

Fungsi Python sortedmengembalikan hasil berbasis ASCII untuk string.

TIDAK BENAR : Dalam contoh di bawah ini, edan dberada di belakang Hdan Wkarena itu dengan nilai ASCII.

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

BENAR : Untuk menulis string yang diurutkan tanpa mengubah huruf. Gunakan kode:

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

Jika Anda ingin menghapus semua tanda baca dan angka. Gunakan kode:

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

kode dapat digunakan untuk mengurutkan string dalam urutan abjad tanpa menggunakan fungsi python inbuilt

k = input ("Masukkan string apa saja lagi")

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)
Kanan Joshi
sumber
1
Idealnya Anda ingin menambahkan beberapa penjelasan pada kode untuk memperjelas apa yang dilakukannya. Selamat datang di SO!
geisterfurz007
1

Sangat menyukai jawabannya dengan fungsi reduce (). Berikut cara lain untuk mengurutkan string menggunakan akumulatif ().

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

diurutkan (s) -> ['i', 'i', 'i', 'i', 'm', 'p', 'p', 's', 's', 's', 's' ]

tuple (terakumulasi (diurutkan)) -> ('i', 'ii', 'iii', 'iiii', 'iiiim', 'iiiimpp', 'iiiimpp', 'iiiimpps', 'iiiimppss', 'iiiimppss', 'iiiimppsss ',' iiiimppssss ')

Kami memilih indeks terakhir (-1) dari tuple

Mono
sumber
Bagus untuk jawaban pertama Anda. Cukup pertimbangkan string 1 juta karakter, perintah tuple () Anda akan membuat daftar besar opsi yang terakumulasi yang menggunakan memori dalam jumlah besar yang tidak perlu.
tda
Sepakat. Jadi, untuk meningkatkan kompleksitas ruang, idenya adalah bekerja dengan iterable itu sendiri, instaed untuk mengubahnya menjadi struktur data. Bagus. Terima kasih.
Mono