>백엔드 개발 >파이썬 튜토리얼 >Python을 사용하여 무질서한 목록을 정렬한 후 새 색인을 얻는 방법

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

WBOY
WBOY앞으로
2023-05-09 23:05:281819검색

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

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으로 문의하시기 바랍니다. 삭제