programing

문자열 길이를 기준으로 Python 목록 정렬

magicmemo 2023. 4. 16. 14:51
반응형

문자열 길이를 기준으로 Python 목록 정렬

문자열 길이를 기준으로 문자열 목록을 정렬하고 싶습니다.아래와 같이 정렬을 시도했지만, 결과가 정확하지 않은 것 같습니다.

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']

뭐가 잘못됐나요?

a를 통과할 때lambda로.sort부울이 아닌 정수를 반환해야 합니다.따라서 코드는 다음과 같이 표시됩니다.

xs.sort(lambda x,y: cmp(len(x), len(y)))

cmp는 다음과 같은 내장 함수입니다.cmp(x, y)이 경우 -1을 반환합니다.x보다 작다y, 0 이면x와 동등하다y, 및 1의 경우x보다 크다y.

물론 그 대신에key파라미터:

xs.sort(key=lambda s: len(s))

이것은,sort키 함수가 반환하는 모든 것을 기준으로 주문할 수 있습니다.

편집: Balpha와 Ruslan은 당신이 단지 합격할 수 있다고 지적해 주셔서 감사합니다.len함수의 핵심 파라미터로서 직접, 따라서 필요 없음lambda:

xs.sort(key=len)

Ruslan이 아래에 지적한 바와 같이 내장 정렬 기능을 사용할 수도 있습니다.list.sortmethod: 기존 목록을 정렬하지 않고 새 목록을 만듭니다.

print(sorted(xs, key=len))

일라이의 대답과 같다 - 단지 더 짧은 형식을 사용했을 뿐이다.lambda여기서 헤어집니다.

새 목록 만들기:

>>> xs = ['dddd','a','bb','ccc']
>>> sorted(xs, key=len)
['a', 'bb', 'ccc', 'dddd']

인플레이스 정렬:

>>> xs.sort(key=len)
>>> xs
['a', 'bb', 'ccc', 'dddd']

가장 쉬운 방법은 다음과 같습니다.

list.list(키 = lamda x:len(x))

정렬하는 동안 피톤 키 기능이 어떻게 작동하는지 추가하려고 합니다.

디자인 패턴 꾸미기-정렬-해제:

정렬 시 Python의 키 기능에 대한 지원은 decorate-sort-undecorate 디자인 패턴으로 알려진 것을 사용하여 구현됩니다.

다음 3단계로 진행됩니다.

  1. 목록의 각 요소는 요소에 적용된 키 기능의 결과를 포함하는 "장식" 버전으로 일시적으로 대체됩니다.

  2. 목록은 키의 자연 순서에 따라 정렬됩니다.

  3. 장식된 요소는 원래 요소로 대체됩니다.

비교하기 전에 각 목록 요소에서 호출할 함수를 지정하는 키 매개 변수입니다.문서

길이를 기준으로 문자열 목록을 정렬하는 함수 렌즈 정렬을 작성합니다.

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(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])

람다를 사용하는 한 라이너에서 다음과 같이 a는 이미 위에 답변했습니다.

 lista = ['a', 'bb', 'ccc', 'dddd']
 lista.sort(key = lambda x:len(x))
 print(lista)
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

이거면 돼!

언급URL : https://stackoverflow.com/questions/2587402/sorting-python-list-based-on-the-length-of-the-string

반응형