공부일지

[Python]sort v.s. sorted, sort(reverse=True) v.s. reverse, reverse v.s. reversed, 리스트 슬라이싱 [1:2:-1]과 [1:2:][::-1] 차이 본문

Computer/공부정리

[Python]sort v.s. sorted, sort(reverse=True) v.s. reverse, reverse v.s. reversed, 리스트 슬라이싱 [1:2:-1]과 [1:2:][::-1] 차이

이르리의 공부일지 2023. 8. 8. 13:47
알고리즘 문제 풀면서 메소드와 내장함수 헷갈렸던 것들 정리합니다.

 

목차

  1. sort v.s. sorted
  2. sort(reverse=True) v.s. reverse
  3. reverse v.s. reversed
  4. 리스트 슬라이싱 [1:2:-1]과 [1:2:][::-1] 차이

 

1. sort sorted 차이

구분 .sort() sorted()
함수 메소드 내장함수
정렬 대상 리스트만 iterable(리스트, 튜플, 스트링 등)
정렬 후 -원본 정렬
-print()로 확인
정렬된 객체를 리스트로 바로 반환
(확인용)
내림차순 리스트명.sort(reverse=True) sorted(리스트명, reverse=True)

 


2. sort(reverse=True)와 reverse 차이

구분 .sort(reverse=True) .reverse()
함수 메소드 메소드
정렬 대상 리스트만 리스트만
정렬 후 -원본 정렬
-print()로 확인
-원본 정렬
-print()로 확인
정렬 분류 내림차순 리스트 내 객체 순서만 반대로, 거꾸로 
정렬 예시 ex. 리스트 = [3, 1, 2, 4] >>print(리스트)
[4, 3, 2, 1]
>>print(리스트)
[4, 2, 1, 3]

 

3. reverse와 reversed 차이

구분 .reverse() reversed()
함수 메소드 내장함수
정렬 대상 리스트만 iterable(리스트, 튜플, 스트링 등)
정렬 후 -원본 정렬
-print()로 확인
정렬된 객체를 리스트로 바로 반환
(확인용)
순서만 반대로, 거꾸로  리스트명.reverse() reversed(리스트명)

 

 


결론

1.

수동태 모양 → 파이썬 내장함수, iterable 대상

.동사/형용사 모양 → 메소드, 특정 객체타입 대상

 

2. 

옵션 reverse= True : 내림차순

함수 reverse, reversed : 순서 반대로, 역순, 거꾸로

(※ 근데 이제 '역순'이란 단어는 '내림차순'같이 쓰일 때가 있어 헷갈리니까 '내림차순'과 '거꾸로'로 각각 기억하자)

 


 
1. append insert extend 차이

(1) array.append(x) : array 내부 객체 맨 끝에 다음 타자로 덧붙인다.

li=[1, 2, 3, 4], x = 9
li.append(x)
print(li)

# [1, 2, 3, 4, 9]


y=[a, b]
li.append(y)
print(li)

# [1, 2, 3, 4, [a, b]]

 

 

 

 

(2) array.extend( iterable ) : iterable 안의 객체를 array 내부 객체 맨 끝에 다음 타자로 넣어 배열을 확장시킨다.

li=[1, 2, 3, 4], x = 9
li.append(x)
print(li)

# [1, 2, 3, 4, 9]


y=[a, b]
li.append(y)
print(li)

# [1, 2, 3, 4, [a, b]]

 

 

(3) array.insert( i, iterable )

li=[1, 2, 3, 4], x = 9
li.insert(0, x)
print(li)

# [9, 1, 2, 3, 4]


li=[1, 2, 3, 4], x = 9
li.insert(2, x)
print(li)

#  [1, 2, 9, 3, 4]

 

li.insert(-1, x), y=[a, b]
print(li)

# [1, 2, 3, [a, b], 4]


li.insert(len(li), x), y=[a, b]
print(li)

# [1, 2, 3, 4, [a, b]]

"""
반대방향으로 한칸 전에 넣어주려면 li.insert(-1, x) 꼴
마지막 자리에 넣어주려면 li.insert(마지막 인덱스 번호, x)꼴 혹은 li.insert(len(li), x)꼴
"""

 



2. 인덱싱 슬라이싱
리스트[i] : 인덱싱
리스트[i : j : k] : 슬라이싱 start, end, step 음수 가능(역순)
 
차이
-인덱싱은 특정 원소 위치 반환
-슬라이싱은 리스트 내 범위 지정해 해당 객체 가져온다

 

li=[1, 2, 3, 4]

print(li[0]) # 1

print(li[1:3]) # 2, 3, 4

print(li[1:3:-1]) # 4, 3, 2

print(li[1:2:]) # 2, 3

 

print(li[1:2:-1]) # None

print(li[1:2:][::-1]) # 3, 2



이유: -1은 해당 리스트의 마지막 원소를 의미
인덱스 2번은 마지막 원소가 아니기 때문에 안 된다. 
그래서 1부터 2번 인덱스까지의 값을 가지는 리스트를 생성한 뒤 슬라이싱을 해주는 방법이 있다.