[Python]-sort와 sorted 메서드

hannah·2024년 1월 22일
1

Python

목록 보기
8/10

파이썬의 리스트 정렬 메서드인 sort()를 배우며 원본 리스트를 정렬한다는 것을 알았다. 그렇다면 원본을 해치지 않으면서 새로운 리스트를 만들어 정렬할 수 있는 방법은 없을까?

바로 sorted()를 사용하면 된다!

sort()sorted()를 비교해보자.

1. sort()

원본 리스트를 정렬(매개변수 이용가능)

  • lambda 함수를 사용할 때는 원본을 계속해서 변형해나가므로 sort()함수를 통해 정렬 필요(sorted())
  • 즉, 반환값이 없음
    my_list=[3,2,1]
    sorted_list=my_list.sort()
    print(sorted_list)    # None
    print(my_list)     # [1,2,3]
    
    my_list.sort(reverse=True)    # 역순
  • key: 정렬 조건을 설정할 함수를 넣을 수 있음
    str_list = ["Python", "JS", "Java", "C"]
    str_list.sort(key=len)
    
    # ['C', 'JS', 'Java', 'Python']

2. sorted()

원본 변형시키지 않고 새로운 리스트를 정렬(매개변수 이용가능) 후 반환

    my_list=[3,2,1]
    sorted_list=sorted(my_list)
    print(sorted_list)    # [1,2,3]
    print(my_list)     # [3,2,1]

파이썬에 sortsorted 메서드가 있다면 자바스크립트에는 이와 비슷하게 sorttoSorted가 있다.

1. sort( )는 파이썬에서와 같이 기능을 하지만 한가지 다른 점이 있다.

파이썬에서와는 다르게 sort()메서드를 사용한 array를 바로 출력할 수 있다는 것! 또한 새로운 리스트로 할당해서 출력하는 것 또한 가능하다!

즉 비교를 해보자면,

// JavaScript
test_list = [50, 40, 20, 64, 45, 34];

console.log(test_list.sort());	// [ 20, 34, 40, 45, 50, 64 ]
console.log(test_list);			// [ 20, 34, 40, 45, 50, 64 ]
new_list = test_list.sort();
console.log(new_list);			// [ 20, 34, 40, 45, 50, 64 ]

위의 경우가 모두 가능하다!👍

하지만

이와 다르게 파이썬 같은 경우에는 새로운 리스트에 값을 넣으면, 리스트 객체의 메모리 주소가 나온다.
즉, 메서드 자체를 출력하고 있는 것이다..

# python
test_list = [50, 40, 20, 64, 45, 34]

print(test_list.sort())		# None(정렬된 리스트는 이미 원본 리스트에 적용되어 있기 때문)
test_list.sort()
print(test_list)			# [20, 34, 40, 45, 50, 64]
new_list = test_list.sort
print(new_list)				# <built-in method sort of list object at 0x000002A3CEE384C0>

2. 자바스크립트의 toSorted()메서드는 파이썬의 sorted와 비슷한 기능을 한다.

즉, 원본 데이터를 해치지 않고 새로운 리스트에 정렬된 값들을 담을 수 있다.

// JavaScript
test_list2 = [500, 400, 200, 640, 450, 340];

sorted_list2 = test_list2.toSorted();
console.log(test_list2);		// [ 500, 400, 200, 640, 450, 340 ]
console.log(sorted_list2);		// [ 200, 340, 400, 450, 500, 640 ]
# python
test_list2 = [500, 400, 200, 640, 450, 340]

sorted_list = sorted(test_list2)
print(test_list2)		# [500, 400, 200, 640, 450, 340]
print(sorted_list)		# [200, 340, 400, 450, 500, 640]

참고로 파이썬에서 lambda 함수를 사용할 때에는 원본값을 가지고 계속해서 조작 또는 정렬을 해야하므로 sort()메서드를 사용해야 한다고 생각하는데 맞는걸까...!?

2개의 댓글

comment-user-thumbnail
2024년 1월 31일

lambda 함수는 함수를 따로 정의할 필요가 없는 간단한 함수를 작성할 때 쓰는 용도이고, lambda 함수를 작성할 때 내가 원본 값이 바뀌어도 상관 없는 경우에는 sort()를, 원본 값은 유지하고 새로운 값을 만들고 싶은 경우에는 sorted()를 쓰면 될거 같아요!

1개의 답글