Python을 사용하여 무질서한 목록을 정렬한 후 새 색인을 얻는 방법

WBOY
풀어 주다: 2023-05-09 23:05:28
앞으로
1818명이 탐색했습니다.

목록의 경우 정렬이 매우 간단합니다. 정방향 정렬(작은 것에서 큰 것 순)에는

list.sort()
로그인 후 복사

를 사용하고, 역방향 정렬(큰 것에서 작은 것 순)에는

list.sort(reverse=True)
로그인 후 복사

를 사용하세요. 그러나 정렬된 목록을 얻는 데 국한되지 않고 원본 아래 첨자를 기록하려는 경우에도 마찬가지입니다. , numpy.array의 경우

np.argsort()
로그인 후 복사

를 사용할 수 있습니다. 예를 들어 [1,3,2,5,6]

정렬하면 [1,2,3,5,6]

이 됩니다. 하지만 우리는 정렬된 결과가 원본에 해당하는지 알고 싶습니다. 아래 첨자는 무엇입니까(답은 [0,2,1,3,4]), np.argsort()

를 사용할 수 있습니다. 하지만 간단하다면 목록에서 이 효과를 얻으려면

# enumerate(x)会自动构造一个tuple(a,b)
# 其中a是index,b是list里index下标对应的具体的值,后面的x是代表一个虚拟变量,即tuple(a,b)
sorted_list = sorted(enumerate(list), key=lambda x:x[1])  # x[1]是因为在enumerate(a)中,a数值在第1位
result = [x[0] for x in sorted_list]
로그인 후 복사

를 이렇게 사용할 수 있습니다. 반환된 결과는 원본 인덱스입니다

제목에 있는 내용을 구현하려면 한 단계 더 나아가십시오. 목록을 정렬한 후 새 첨자를 사용하세요. 예를 들어 [1,5,2,8,3,4]의 경우 [0,4,1,5,2,3]

그러면 사용할 수 있습니다

# enumerate(x)会自动构造一个tuple(a,b)
# 其中a是index,b是list里index下标对应的具体的值,后面的x是代表一个虚拟变量,即tuple(a,b)
# sorted_list = [(0,1),(2,2),(4,3),(5,4),(1,5),(3,8)]
sorted_list = sorted(enumerate(list), key=lambda x:x[1])  # x[1]是因为在enumerate(a)中,a数值在第1位
for i in range(len(sorted_list)):
    list[sorted_list[i][1]] = i
로그인 후 복사

위 내용은 Python을 사용하여 무질서한 목록을 정렬한 후 새 색인을 얻는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿