문제

Python에서 알파벳순으로 정렬된 목록을 만드는 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

기본 답변:

mylist = ["b", "C", "A"]
mylist.sort()

이렇게 하면 원래 목록이 수정됩니다(예:내부 정렬).원본을 변경하지 않고 목록의 정렬된 복사본을 얻으려면 sorted() 기능:

for x in sorted(mylist):
    print x

그러나 위의 예는 로케일을 고려하지 않고 대소문자를 구분하여 정렬하기 때문에 다소 순진합니다.선택적 매개변수를 활용할 수 있습니다. key 사용자 정의 정렬 순서를 지정하려면(대체 방법: cmp, 는 여러 번 평가해야 하므로 더 이상 사용되지 않는 솔루션입니다. key 요소당 한 번만 계산됩니다.)

따라서 현재 로케일에 따라 정렬하려면 언어별 규칙을 고려합니다(cmp_to_key functools의 도우미 함수입니다.

sorted(mylist, key=cmp_to_key(locale.strcoll))

마지막으로 필요한 경우 맞춤 로케일 정렬용:

import locale
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') # vary depending on your lang/locale
assert sorted((u'Ab', u'ad', u'aa'),
  key=cmp_to_key(locale.strcoll)) == [u'aa', u'Ab', u'ad']

마지막 메모:대소문자를 구분하지 않는 정렬의 예를 볼 수 있습니다. lower() 방법 - 이는 문자의 ASCII 하위 집합에 대해서만 작동하기 때문에 올바르지 않습니다.영어가 아닌 데이터에는 이 두 가지가 잘못되었습니다.

# this is incorrect!
mylist.sort(key=lambda x: x.lower())
# alternative notation, a bit faster, but still wrong
mylist.sort(key=str.lower)

다른 팁

또한 주목할 만한 점은 sorted() 기능:

for x in sorted(list):
    print x

그러면 원래 목록을 변경하지 않고 목록의 새로운 정렬 버전이 반환됩니다.

list.sort()

정말 간단해요 :)

문자열을 정렬하는 올바른 방법은 다음과 같습니다.

import locale
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') # vary depending on your lang/locale
assert sorted((u'Ab', u'ad', u'aa'), cmp=locale.strcoll) == [u'aa', u'Ab', u'ad']

# Without using locale.strcoll you get:
assert sorted((u'Ab', u'ad', u'aa')) == [u'Ab', u'aa', u'ad']

이전 예는 mylist.sort(key=lambda x: x.lower()) ASCII 전용 컨텍스트에서는 제대로 작동합니다.

그러나 이것이 언어별 정렬 규칙을 어떻게 처리합니까?로케일을 고려합니까?

아니요, list.sort() 일반적인 정렬 기능입니다.유니코드 규칙에 따라 정렬하려면 사용자 정의 정렬 키 기능을 정의해야 합니다.다음을 사용해 볼 수 있습니다. 퓨카 모듈이지만 얼마나 완전한지는 모르겠습니다.

Python3에서 sorted() 함수를 사용하세요.

items = ["love", "like", "play", "cool", "my"]
sorted(items2)

가정하다 s = "ZWzaAd"

위의 문자열을 정렬하려면 간단한 솔루션이 1 아래에 있습니다.

print ''.join(sorted(s))

아니면:

names = ['Jasmine', 'Alberto', 'Ross', 'dig-dog']
print ("The solution for this is about this names being sorted:",sorted(names, key=lambda name:name.lower()))
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top