.sort()와 sorted() 개념. 다른점. 그리고 .reverse ()와 reversed()

권수민·2023년 8월 17일
1

일단 python에서는 리스트 정렬을 도와주는 두가지 함수가 있다.

여기서 n=> int 타입이라 하면 iterable하지 않기에 list(str(n))이런식으로 만들어줘야한다.

[list].sort() / sorted([list])

사용하는게 다른데 이유는 포함하는 함수가 달라 리턴값이 다르기 때문이다.

정렬하는데 있어 str이든 int이든 상관이 없다 리스트 형태라면.

[list].sort()

sort(*, key=None, reverse=False)

sort(), sort(reverse=False)=> 오름차순으로 정렬
sort(reverse=True)=> 내림차순으로 정렬

num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
num = num_list.sort()
print(num) #=> None
print(num_list) # => [1, 2, 2, 2, 3, 3, 4, 4, 5, 6, 6]

원본 영향이 있고 기본 return값이 None이기에 정렬값을 부를라면 원본을 불러야한다.

=> 원본에 바로 재정렬이 이루어지기때문에 원본 훼손
=> key 값을 기준으로 정렬되고 기본값은 오름차순이다.
=> key는 정렬을 목적으로 하는 함수를 값으로 넣는다. 
	len,lambda를 이용할 수 있다.
    

=> lambda 함수 참조: https://wikidocs.net/64 https://kingofbackend.tistory.com/98

m.sort(key=len) =>글자 수에 따라 정렬.
print(m) => ['나는', '싶다', '잘하고', '파이썬을']

a.sort()는 왜 어떤 값도 리턴하지 않는 이유는
list라는 클래스로 만든 객체(여기서는 a)는 내부적으로 1,2,3,1이라는 값을 attribute로 들고 있다가( e.g. self.values), sort()라는 클래스에 정의된 method가 호출되면 self.values를 정렬시키고 다시 self.values에 담아둡니다(return을 하는 것이 아닌)

return한 값을 가지고 싶다면 Python 에서 기본으로 제공하는 sorted()를 사용해야됩니다.(sorted(a) 처럼)

클래스 매소드 참조: http://www.tcpschool.com/python2018/python_class_object

sorted([list])

num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]

print(sorted(num_list)) 
#=> [1, 2, 2, 2, 3, 3, 4, 4, 5, 6, 6] 
#=> 변수를 따로 만들어 저장해줄 수 있다. a = sorted(num_list)
print(num_list)
#=>[1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4] 원본영향 없음

순서대로 정렬, 정렬된 리스트를 반환, 원형 훼손 x
reverse=True 넣어주면 내림차순 가능 => sorted(num_list,reverse=True)

list.reverse()

=> 리스트를 꺼꾸로 반환
=> 원형값 none, 원본변형됌, 값을 부르려면 원본을 불러야해

num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]

print(num_list.reverse())
=> None
print(num_list) 
=> [4, 2, 6, 5, 4, 2, 3, 6, 3, 2, 1] 원형변환

reversed(list)

=> 리스트를 꺼꾸로 반환
=>원형값 주소?불러줌, 원본변형 x, 값을 부르려면 list()type으로 불러줘야해
=> 하지마 객체는 이터러블하기 때문에 map 같은 함수에 list없이 사용이 가능하다. =>
print(list(map(int,reversed('12345'))))

리터러블 정의: map함수 설명에 정의 ::https://velog.io/@stella_k/python-tuple-set-f-string-try-except%ED%8C%8C%EC%9D%BC%EB%B6%84%EB%A6%AC-%EC%82%BC%ED%95%AD%EC%97%B0%EC%82%B0%EC%9E%90-mapfilterlambda-%EC%8B%9D-%ED%95%A8%EC%88%98%EC%8B%AC%ED%99%94-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%A0%95%EB%A6%AC

num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]

y = reversed(num_list)
print(y)
=> <list_reverseiterator object at 0x104fd7d00>
print(num_list)
=> [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
print(list(y))
=> [4, 2, 6, 5, 4, 2, 3, 6, 3, 2, 1]

profile
초보개발자

1개의 댓글

comment-user-thumbnail
2023년 8월 18일

헷갈리기 쉬운 sort와 sorted, reverse와 reversed가 정리가 잘 된것 같습니다:)

답글 달기