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'

Jawaban:


276

Anda dapat melakukan:

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

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'

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'

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'

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'

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)

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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.