Python'da bir dizedeki harfleri alfabetik olarak sıralama


157

Bir dizedeki harfleri Python'da alfabetik olarak sıralamanın kolay bir yolu var mı?

İçin böylece:

a = 'ZENOVW'

Dönmek isterim:

'ENOVWZ'

Yanıtlar:


276

Yapabilirsin:

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

Sıralı sorted(a)bir liste döndüreceğini unutmayın , bu nedenle dize karşılaştırmaları için gerekmemektedir join()(aşağıdaki soru cevap bölümüne bakınız).
Skippy le Grand Gourou

''.join(sorted(a, reverse=True, key=str.lower))Tersine büyük / küçük harfe duyarlı olmayan bir sıralama gerçekleştirmek için kullanılabileceğini unutmayın . Kullanışlı olabilir.
Superdooperhero

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

sortedbir liste döndürür, böylece aşağıdakileri kullanarak tekrar dize yapabilirsiniz join:

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

her öğenin arasında bboş bir dize ile öğelerin birleştirildiği ''.

>>> print c
'ENOVWZ'

31

Sorted () çözümü size diğer dizelerle beklenmedik sonuçlar verebilir.

Diğer çözümlerin listesi:

Harfleri sıralayın ve ayırın:

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

Büyük harfleri tutarken harfleri sıralayın ve ayırt edin:

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

Harfleri sıralayın ve kopyaları saklayın:

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

Sonuçtaki alandan kurtulmak istiyorsanız, belirtilen durumlardan birine strip () işlevi ekleyin:

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

Hey, bu ilk çözüm, ikiye ayırma kullanarak bir mektup bulmam gereken bir ev ödevi için oldukça faydalıydı. Evet, zaten dize sınıfı ve find () yöntemi hakkında biliyorum, ama bu egzersizin amacını
runlevel0 15

9

Azaltma kullanabilirsiniz

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

7

Python işlevi sorteddize için ASCII tabanlı sonuç döndürür.

YANLIŞ : Aşağıdaki örnekte eve darkasında Hve WASCII değeri nedeniyle.

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

DÜZELT : Harf büyüklüğünü değiştirmeden sıralanan dizeyi yazmak için . Kodu kullanın:

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

Tüm noktalama işaretlerini ve sayıları kaldırmak istiyorsanız. Kodu kullanın:

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

3

kod, python'un herhangi bir dahili işlevini kullanmadan dizeyi alfabetik olarak sıralamak için kullanılabilir

k = giriş ("Herhangi bir dizgiyi tekrar girin")

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
İdeal olarak, kodun ne yaptığını netleştirmek için bir açıklama eklemek istersiniz. SO hoş geldiniz!
geisterfurz007

1

Reduce () fonksiyonu ile cevabı gerçekten beğendim. Dizeyi accumulate () kullanarak sıralamanın başka bir yolu.

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

sıralanmış (s) -> ['i', 'i', 'i', 'i', 'm', 'p', 'p', 's', 's', 's', 's' ]

demet (birikir (sıralanır)) -> ('i', 'ii', 'iii', 'iiii', 'iiiim', 'iiiimp', 'iiiimpp', 'iiiimpps', 'iiiimppss', 'iiiimppsss ',' iiiimppssss ')

Grubun son dizinini (-1) seçiyoruz


İlk cevabınız için tebrikler. Sadece 1 milyon karakterlik bir dize düşünün, tuple () komutunuz gereksiz yere büyük miktarda bellek kullanan çok sayıda birikmiş seçenek oluşturur.
tda

Kabul. Bu nedenle, alan karmaşıklığını iyileştirmek için fikir, onu bir veri yapısına dönüştürmekle özdeşleştirilen yinelenebilir kendiyle çalışmaktır. Güzel. Teşekkür ederim.
Mono
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.