문자열 길이를 기준으로 문자열 목록을 정렬하고 싶습니다. 나는 다음과 같이 정렬을 사용하려고 시도했지만 올바른 결과를 얻지 못하는 것 같습니다.
xs = ['dddd','a','bb','ccc']
print xs
xs.sort(lambda x,y: len(x) < len(y))
print xs
['dddd', 'a', 'bb', 'ccc']
['dddd', 'a', 'bb', 'ccc']
무엇이 잘못 되었을까요?
답변
당신이 통과하는 경우 lambda
에 sort
, 당신은 정수가 아닌 부울을 반환해야합니다. 따라서 코드는 다음과 같이 읽어야합니다.
xs.sort(lambda x,y: cmp(len(x), len(y)))
참고 CMP가 내장 명령 함수가되도록 cmp(x, y)
복귀 경우 -1 x
미만 y
0이 경우, x
IS가 동일한 y
경우, 1 x
보다 크다 y
.
물론 대신 key
매개 변수 를 사용할 수 있습니다 .
xs.sort(key=lambda s: len(s))
이것은 sort
키 함수가 반환하는 모든 것에 따라 순서를 지정 하도록 메서드에 지시합니다.
편집 : 아래의 balpha와 Ruslan에게 감사드립니다 len
. 키 매개 변수로 함수에 직접 전달할 수 있으므로 a가 필요하지 않습니다 lambda
.
xs.sort(key=len)
그리고 Ruslan이 아래에서 지적했듯이 기존의 목록을 제자리에서 정렬하는 대신 새 목록을 만드는 메서드 대신 내장 정렬 된 함수 를 사용할 수도 있습니다 list.sort
.
print(sorted(xs, key=len))
답변
Eli의 답변과 동일 lambda
합니다. 여기서 부분을 건너 뛸 수 있으므로 더 짧은 형식을 사용 하십시오.
새 목록 생성 :
>>> xs = ['dddd','a','bb','ccc']
>>> sorted(xs, key=len)
['a', 'bb', 'ccc', 'dddd']
내부 정렬 :
>>> xs.sort(key=len)
>>> xs
['a', 'bb', 'ccc', 'dddd']
답변
정렬하는 동안 파이썬 키 기능이 작동하는 방식을 추가하고 싶습니다.
장식-정렬-장식 해제 디자인 패턴 :
정렬시 주요 기능에 대한 Python의 지원은 decorate-sort-undecorate 디자인 패턴으로 알려진 것을 사용하여 구현됩니다.
3 단계로 진행됩니다.
-
목록의 각 요소는 요소에 적용된 키 기능의 결과를 포함하는 “장식 된”버전으로 일시적으로 대체됩니다.
-
목록은 키의 자연스러운 순서에 따라 정렬됩니다.
-
장식 된 요소는 원래 요소로 대체됩니다.
비교하기 전에 각 목록 요소에서 호출 할 함수를 지정하는 키 매개 변수입니다. 문서
답변
이를 수행하는 가장 쉬운 방법은 다음과 같습니다.
list.sort (key = 람다 x : len (x))
답변
길이를 기준으로 문자열 목록을 정렬하는 함수 lensort를 작성하십시오.
def lensort(a):
n = len(a)
for i in range(n):
for j in range(i+1,n):
if len(a[i]) > len(a[j]):
temp = a[i]
a[i] = a[j]
a[j] = temp
return a
print lensort(["hello","bye","good"])
답변
def lensort(list_1):
list_2=[];list_3=[]
for i in list_1:
list_2.append([i,len(i)])
list_2.sort(key = lambda x : x[1])
for i in list_2:
list_3.append(i[0])
return list_3
이것은 나를 위해 작동합니다!
답변
기능을 사용하여 아래 두 가지 방법을 사용하여 할 수 있습니다.
def lensort(x):
list1 = []
for i in x:
list1.append([len(i),i])
return sorted(list1)
lista = ['a', 'bb', 'ccc', 'dddd']
a=lensort(lista)
print([l[1] for l in a])
Lambda를 사용하는 한 라이너에서 아래와 같이 이미 위에 답변했습니다.
lista = ['a', 'bb', 'ccc', 'dddd']
lista.sort(key = lambda x:len(x))
print(lista)