[PYTHON] 안에있는 문자열을 올바르게 정렬하는 방법? [복제]
PYTHON안에있는 문자열을 올바르게 정렬하는 방법? [복제]
숫자가 포함 된 문자열 목록이있어서이를 정렬하는 좋은 방법을 찾을 수 없습니다. 예를 들어 나는 다음과 같은 것을 얻는다 :
something1
something12
something17
something2
something25
something29
sort () 메소드로.
어떻게 든 번호를 추출한 다음 목록을 정렬해야 할 필요가 있지만 가장 간단한 방법으로 어떻게해야하는지 잘 모를 것입니다.
해결법
-
==============================
1.아마도 인간 정렬 (자연 정렬이라고도 함)을 찾고 있습니다.
아마도 인간 정렬 (자연 정렬이라고도 함)을 찾고 있습니다.
import re def atoi(text): return int(text) if text.isdigit() else text def natural_keys(text): ''' alist.sort(key=natural_keys) sorts in human order http://nedbatchelder.com/blog/200712/human_sorting.html (See Toothy's implementation in the comments) ''' return [ atoi(c) for c in re.split('(\d+)', text) ] alist=[ "something1", "something12", "something17", "something2", "something25", "something29"] alist.sort(key=natural_keys) print(alist)
산출량
['something1', 'something2', 'something12', 'something17', 'something25', 'something29']
추신. Toothy가 자연 정렬 작업을 사용하기 위해 내 대답을 변경했습니다 (원래 주석보다 훨씬 빠르기 때문에 여기에 주석에 게시).
실수로 텍스트를 정렬하려면 정수 (즉, (\ d +))와 일치하는 정규식을 실수와 일치하는 정규식으로 변경해야합니다.
import re def atof(text): try: retval = float(text) except ValueError: retval = text return retval def natural_keys(text): ''' alist.sort(key=natural_keys) sorts in human order http://nedbatchelder.com/blog/200712/human_sorting.html (See Toothy's implementation in the comments) float regex comes from https://stackoverflow.com/a/12643073/190597 ''' return [ atof(c) for c in re.split(r'[+-]?([0-9]+(?:[.][0-9]*)?|[.][0-9]+)', text) ] alist=[ "something1", "something2", "something1.0", "something1.25", "something1.105"] alist.sort(key=natural_keys) print(alist)
산출량
['something1', 'something1.0', 'something1.105', 'something1.25', 'something2']
from https://stackoverflow.com/questions/5967500/how-to-correctly-sort-a-string-with-a-number-inside by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 범위 내에서 'n'개의 고유 난수 생성 [duplicate] (0) | 2018.10.04 |
---|---|
[PYTHON] 파이썬 사전을 XML로 직렬화 [닫힘] (0) | 2018.10.04 |
[PYTHON] 모든 스레드가 완료 될 때까지 파이썬 다중 스레드 대기 (0) | 2018.10.04 |
[PYTHON] 파이썬 CSV 오류 : 라인에 NULL 바이트가 들어 있습니다. (0) | 2018.10.04 |
[PYTHON] 두 목록 사이의 조합? (0) | 2018.10.04 |