2016-06-07 10 views
0

파일 확장명을 기준으로 목록을 정렬하는 함수를 정의하라는 메시지가 표시되었습니다.각 요소 내에서 특정 문자로 목록을 정렬하려면 어떻게합니까?

정렬 작업을 이해하지만 "."에서 정렬을 시작하는 방법을 모르겠습니다. 캐릭터. 당신은 sorted에 대한 매개 변수로 키 기능을 전달할 수

>>> extsort(['a.c', 'a.py', 'b.py', 'bar.txt', 'foo.txt', 'x.c']) 
['a.c', 'x.c', 'a.py', 'b.py', 'bar.txt', 'foo.txt'] 
+0

그래서 file.ext를 반환 내선에서 시작 종류 및 구문 분석하고 파일 이름과 확장자를 반전 람다 기능을 제공에서'key' 매개 변수 –

+0

보기에 읽어 . 파일에서 람다. John Coleman의 항목과 함께 작동합니다. 'l '= ['x.c ','a.py ','b.py ','bar.txt ','foo.txt ','a.c ']'에 대한 – LhasaDad

답변

4

:

>>> l = ['a.c', 'a.py', 'b.py', 'bar.txt', 'foo.txt', 'x.c'] 
>>> sorted(l, key=lambda x: splitext('.')[1]) 
['a.c', 'a.py', 'b.py', 'bar.txt', 'foo.txt', 'x.c'] 

당신은 같은 확장자로 파일을해야하는 경우

자신의 이름으로 분류 할

나는 다음과 같은 결과를 원한다 분할 결과를 되돌리려면 키 기능을 변경할 수 있습니다.

>>> l = ['x.c', 'a.py', 'b.py', 'bar.txt', 'foo.txt', 'a.c'] 
>>> sorted(l, key=lambda x: splitext(x)[::-1]) 
['a.c', 'x.c', 'a.py', 'b.py', 'bar.txt', 'foo.txt'] 
+0

'나는 당신의 해결책이 권리. 출력은'[ 'x.c', 'a.c', 'a.py', 'b.py', 'bar.txt', 'foo.txt']''나는 thr 저자가' 'a.c', 'x.c', 'a.py', 'b.py', 'bar.txt', 'foo.txt']'. – BlackMamba

+0

괜찮아요. 한 가지 질문 만 봅니다. 람다 함수의 끝 부분에 [1]은 무엇을 지정합니까? – Este

+0

@BlackMamba 음, 아마도. OP는 지정된 확장자 * 내의 값 *을 정렬해야하는지 여부를 지정하지 않았습니다. – SethMMorton

3

일부 파일에 확장명이 없더라도 (그리고 자체적으로 문서화하는 것이더라도) 작동하는 이온은 sortedkey 기능의 일부로 os.path.splitext을 사용하십시오. 어떤 파일 확장자가없는 경우, 다른 모든 확장하기 전에 정렬, 빈 문자열, ''로 확장을 처리합니다 :

>>> l = ['b.py', 'a.c', 'a.py', 'bar.txt', 'foo.txt', 'x.c', 'foo'] 
>>> sorted(l, key=lambda x: os.path.splitext(x)[1]) 
['foo', 'a.c', 'x.c', 'b.py', 'a.py', 'bar.txt', 'foo.txt'] 

는 입력에 처음 등장하기 때문에 b.py는, 여기 a.py 먼저 정렬합니다 및 파일 확장자에 대해서만 정렬 된 정렬. 확장명을 기준으로 정렬하고 전체 이름을 지정하려면 확장명이 아닌 확장명을 차례로 입력하고 ([::-1]을 사용하여 반환 된 값 os.path.splitext의 반환 값이 쉽게 반홖됩니다.) a.py 앞에옵니다. b.py 관계없이 입력 등장 곳의 :

>>> sorted(l, key=lambda x: os.path.splitext(x)[::-1]) 
['foo', 'a.c', 'x.c', 'a.py', 'b.py', 'bar.txt', 'foo.txt']