파이썬에서 문자열의 문자를 알파벳순으로 정렬하는 방법


157

파이썬에서 알파벳 순으로 문자를 정렬하는 쉬운 방법이 있습니까?

그래서 :

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

파이썬 함수 sorted는 문자열에 대한 ASCII 기반 결과를 반환합니다.

INCORRECT : 아래의 예에서 ed뒤에 HW는 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

코드는 파이썬의 내장 함수를 사용하지 않고 알파벳 순서로 문자열을 정렬하는 데 사용할 수 있습니다

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

reduce () 함수로 답을 좋아했습니다. 다음은 collect ()를 사용하여 문자열을 정렬하는 다른 방법입니다.

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', 'iiiimppssss ','iiiimppssss ')

튜플의 마지막 인덱스 (-1)를 선택합니다


첫 번째 대답은 잘되었습니다. 백만 개의 문자열을 고려하면 tuple () 명령은 불필요하게 많은 양의 메모리를 사용하는 누적 옵션 목록을 생성합니다.
tda

동의했다. 따라서 공간 복잡성을 개선하기 위해서는 공간 구조를 데이터 구조로 변환하여 반복 가능한 자체 작업을 수행해야합니다. 좋은. 감사합니다.
Mono
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.