반응형
질문
나는 다음과 같은 문자열 목록을 가지고 있습니다:
X = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
Y = [ 0, 1, 1, 0, 1, 2, 2, 0, 1 ]
다음 출력을 얻기 위해 Y의 값을 사용하여 X를 정렬하는 가장 짧은 방법은 무엇인가요?
["a", "d", "h", "b", "c", "e", "i", "f", "g"]
같은 "key"를 가진 요소의 순서는 중요하지 않습니다. for
구문을 사용할 수 있지만 더 짧은 방법이 있는지 궁금합니다. 어떤 제안이 있으신가요?
답변
가장 짧은 코드
[x for _, x in sorted(zip(Y, X))]
예시:
X = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
Y = [ 0, 1, 1, 0, 1, 2, 2, 0, 1]
Z = [x for _,x in sorted(zip(Y,X))]
print(Z) # ["a", "d", "h", "b", "c", "e", "i", "f", "g"]
일반적으로 말해서
[x for _, x in sorted(zip(Y, X), key=lambda pair: pair[0])]
설명:
zip
을 사용하여 두 개의list
를 묶습니다.sorted()
를 사용하여zip
을 기반으로 새로운 정렬된list
를 생성합니다.- 정렬된, 묶인
list
에서 각 쌍의 첫 번째 요소를 추출하기 위해 리스트 컴프리헨션을 사용합니다.
key
매개변수를 설정하고 사용하는 방법 및 일반적으로 sorted
함수에 대한 자세한 정보는 여기를 참조하십시오.
반응형
댓글