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

Sorted()ソリューションは、他の文字列で予期しない結果をもたらす可能性があります。

他のソリューションのリスト:

文字を並べ替えて区別します。

>>> 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ベースの結果を返します。

INCORRECT:以下の例では、edの背後にあるHW、それはASCII値をだため。

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

CORRECT:文字の大文字と小文字変更せずにソートされた文字列を書き込むため。コードを使用します。

>>> 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 = input( "任意の文字列をもう一度入力してください")

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

reduce()関数の答えが本当に気に入りました。accumulate()を使用して文字列を並べ替える別の方法を次に示します。

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

ソート済み-> ['i'、 'i'、 'i'、 'i'、 'm'、 'p'、 'p'、 's'、 's'、 's'、 's' ]

tuple(accumulate(sorted(s)))->( 'i'、 'ii'、 'iii'、 'iiii'、 'iiiim'、 'iiiimp'、 'iiiimpp'、 'iiiimpps'、 'iiiimppss'、 'iiiimppsss '、' iiiimppssss ')

タプルの最後のインデックス(-1)を選択しています


最初の答えはよくできました。100万文字の文字列を考えてみてください。tuple()コマンドは、不必要に大量のメモリを使用する累積オプションの膨大なリストを作成します。
tda

同意した。したがって、スペースの複雑さを改善するためのアイデアは、データ構造に変換するのではなく、イテラブル自体を操作することです。いいね。ありがとうございました。
モノ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.