파이썬의 리스트 정렬 메서드인 sort()를 배우며 원본 리스트를 정렬한다는 것을 알았다. 그렇다면 원본을 해치지 않으면서 새로운 리스트를 만들어 정렬할 수 있는 방법은 없을까?
바로 sorted()
를 사용하면 된다!
sort()
와 sorted()
를 비교해보자.
1.
sort()
원본 리스트를 정렬(매개변수 이용가능)
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) # 역순
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]
sort
와 sorted
메서드가 있다면 자바스크립트에는 이와 비슷하게 sort
와 toSorted
가 있다.파이썬에서와는 다르게 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>
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]
sort()
메서드를 사용해야 한다고 생각하는데 맞는걸까...!?
lambda 함수는 함수를 따로 정의할 필요가 없는 간단한 함수를 작성할 때 쓰는 용도이고, lambda 함수를 작성할 때 내가 원본 값이 바뀌어도 상관 없는 경우에는 sort()를, 원본 값은 유지하고 새로운 값을 만들고 싶은 경우에는 sorted()를 쓰면 될거 같아요!