문자열 목록을 어떻게 정렬합니까?
Python에서 알파벳 순으로 정렬된 목록을 만드는 가장 좋은 방법은 무엇입니까?
기본적인 답변:
mylist = ["b", "C", "A"]
mylist.sort()
그러면 원래 목록이 수정됩니다(즉, 내부 정렬).원본을 변경하지 않고 목록의 정렬된 복사본을 가져오려면 다음 기능을 사용합니다.
for x in sorted(mylist):
print x
단, 위의 예는 로케일을 고려하지 않고 대소문자를 구분하여 정렬하기 때문에 약간 단순합니다.옵션 파라미터를 이용할 수 있습니다.key
사용자 정의 정렬 순서를 지정하려면(대신, 사용)cmp
는 여러 번 평가해야 하므로 권장되지 않는 솔루션입니다.key
는 요소당 1회만 계산됩니다.
따라서 현재 로케일에 따라 정렬하려면 언어 고유의 규칙을 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()
method - 문자의 ASCII 서브셋에서만 동작하기 때문에 올바르지 않습니다.다음 두 가지는 영어가 아닌 데이터에 적합하지 않습니다.
# this is incorrect!
mylist.sort(key=lambda x: x.lower())
# alternative notation, a bit faster, but still wrong
mylist.sort(key=str.lower)
또한 다음 기능에 유의할 필요가 있습니다.
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 전용 컨텍스트에서는 정상적으로 동작합니다.
Python3에서 sorted() 함수를 사용하십시오.
items = ["love", "like", "play", "cool", "my"]
sorted(items2)
그러나 이것은 언어별 정렬 규칙을 어떻게 처리합니까?로케일이 고려됩니까?
아니요.list.sort()
는 범용 정렬 기능입니다.유니코드 규칙에 따라 정렬하려면 사용자 정의 정렬 키 함수를 정의해야 합니다.pyuca 모듈을 사용해 볼 수는 있지만, 어느 정도 완성되어 있는지 모르겠습니다.
오래된 질문이지만 설정 없이 로케일 인식 정렬을 수행할 경우 locale.LC_ALL
PyICU 라이브러리를 사용하면 다음과 같은 답변을 얻을 수 있습니다.
import icu # PyICU
def sorted_strings(strings, locale=None):
if locale is None:
return sorted(strings)
collator = icu.Collator.createInstance(icu.Locale(locale))
return sorted(strings, key=collator.getSortKey)
다음으로 예를 들어 다음과 같이 문의합니다.
new_list = sorted_strings(list_of_strings, "de_DE.utf8")
이것은, 로케일을 인스톨 하거나 다른 시스템 설정을 변경하지 않아도 동작했습니다.
(위 댓글에서 이미 제안했지만, 저도 처음에는 놓쳤기 때문에 좀 더 부각시키고 싶었습니다.)
l =['abc' , 'cd' , 'xy' , 'ba' , 'dc']
l.sort()
print(l1)
결과
['바', 'cd', 'dc', 'xy']
가정하다s = "ZWzaAd"
문자열 위에 정렬하려면 간단한 솔루션이 아래에 있습니다.
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()))
간단합니다.https://trinket.io/library/trinkets/5db81676e4
scores = '54 - Alice,35 - Bob,27 - Carol,27 - Chuck,05 - Craig,30 - Dan,27 - Erin,77 - Eve,14 - Fay,20 - Frank,48 - Grace,61 - Heidi,03 - Judy,28 - Mallory,05 - Olivia,44 - Oscar,34 - Peggy,30 - Sybil,82 - Trent,75 - Trudy,92 - Victor,37 - Walter'
sorted(sorted)의 x에 대한 점수 = scores.scores)': print(x)
언급URL : https://stackoverflow.com/questions/36139/how-to-sort-a-list-of-strings
'programing' 카테고리의 다른 글
.class용 Java 동기 블록 (0) | 2022.12.29 |
---|---|
문자열 "XML safe"는 어떻게 만드나요? (0) | 2022.12.29 |
JavaScript에서 지연, 약속 및 미래의 차이점은 무엇입니까? (0) | 2022.12.29 |
XAMPP 제어판 v3.2.1에서 VMware 포트 오류 443을 중지하는 방법 (0) | 2022.12.29 |
인수로 튜플 확장 (0) | 2022.12.19 |