.add() vs .append() vs .extend() 차이점 정리 (Markdown 문법)
.add() vs .append() vs .extend() 차이점| 메서드 | 사용 대상 | 기능 설명 | 예제 | 특징 |
|---|---|---|---|---|
.add(x) | set | 집합에 요소 x를 추가 | s.add(5) | 중복된 값 추가 시 무시됨 (set 특성) |
.append(x) | list | 리스트 끝에 요소 x를 추가 | lst.append(5) | 리스트에 단일 요소 추가 |
.extend(l) | list | 리스트에 다른 리스트의 요소들을 개별적으로 추가 | lst.extend([4, 5]) | 리스트를 합치는 효과 |
.add() (set에서 사용)s = {1, 2, 3}
s.add(4)
print(s) # {1, 2, 3, 4}
s.add(4) # 중복 추가 시 무시됨
print(s) # {1, 2, 3, 4}
lst = [1, 2, 3]
lst.append(4)
print(lst) # [1, 2, 3, 4]
lst.append([5, 6])
print(lst) # [1, 2, 3, 4, [5, 6]] # 리스트 전체가 하나의 요소로 추가됨
lst = [1, 2, 3]
lst.extend([4, 5])
print(lst) # [1, 2, 3, 4, 5] # 리스트의 개별 요소들이 추가됨
.add() → set에서 사용하며, 중복을 허용하지 않고 요소 추가
.append() → list에서 사용하며, 단일 요소를 추가
.extend() → list에서 사용하며, 다른 리스트의 개별 요소들을 추가
leetcode 의 문제에서
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
answer = []
if not matrix or not matrix[0]:
return answer
n = len(matrix[0]) # 행
m = len(matrix) #열
# 첫번째 행
for i in range(n):
answer.append(matrix[0][i])
# 오른쪽 열
for i in range(1,m):
answer.append(matrix[i][-1])
# 마지막 행
if m > 1:
for i in range(n-2,-1,-1):
answer.append(matrix[-1][i])
# 왼쪽열
if n > 1:
for i in range(m-2,0,-1):
answer.append(matrix[i][0])
# 재귀
inner_matrix = [row[1:-1] for row in matrix[1:-1]]
print("inner_matrix: ", inner_matrix)
answer.extend(self.spiralOrder(inner_matrix))
return answer
nums = [1, 2, 3]
nums2 = [4, 5, 6]
result = nums.extend(nums2) # nums에 nums2를 확장
print(result) # None (리턴값이 없음)
print(nums) # [1, 2, 3, 4, 5, 6] (변경됨)
.extend()는 원본 리스트를 직접 수정하지만, 새로운 리스트를 반환하지 않음 (None을 반환).
✅ 올바른 코드 (수정)
방법 1: extend() 사용 후 nums 반환
from typing import List
class Solution:
def getConcatenation(self, nums: List[int]) -> List[int]:
nums2 = nums.copy() # deepcopy 필요 없음 (1D 리스트이므로 copy로 충분)
nums.extend(nums2)
return nums # 직접 수정된 nums 반환
# 테스트
sol = Solution()
print(sol.getConcatenation([1, 2, 3])) # [1, 2, 3, 1, 2, 3]
✅ nums.extend(nums2)는 None을 반환하므로, nums 자체를 반환해야 함
방법 2: + 연산자 사용 (더 간결함)
from typing import List
class Solution:
def getConcatenation(self, nums: List[int]) -> List[int]:
return nums + nums # 리스트를 새로 생성하여 반환
# 테스트
sol = Solution()
print(sol.getConcatenation([1, 2, 3])) # [1, 2, 3, 1, 2, 3]
✅ nums + nums는 새로운 리스트를 반환하므로 더 직관적
✅ O(n)으로 최적화된 연산 (메모리 복사 없음)
✅ 슬라이싱(nums[:] + nums[:])도 가능