본문 바로가기
Python/Python FAQ

Python 병렬 리스트의 해당 값에 따라 목록을 정렬합니다. [중복], Sorting list according to corresponding values from a parallel list [duplicate]

by 베타코드 2023. 9. 9.
반응형

질문


나는 다음과 같은 문자열 목록을 가지고 있습니다:

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

설명:

  1. zip을 사용하여 두 개의 list를 묶습니다.
  2. sorted()를 사용하여 zip을 기반으로 새로운 정렬된 list를 생성합니다.
  3. 정렬된, 묶인 list에서 각 쌍의 첫 번째 요소를 추출하기 위해 리스트 컴프리헨션을 사용합니다.

key 매개변수를 설정하고 사용하는 방법 및 일반적으로 sorted 함수에 대한 자세한 정보는 여기를 참조하십시오.


반응형

댓글