.extend, .append, .add차이

Leejaegun·2025년 3월 10일

코딩테스트 시리즈

목록 보기
2/49

.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])리스트를 합치는 효과

📌 사용 예제

1️⃣ .add() (set에서 사용)

s = {1, 2, 3}
s.add(4)
print(s)  # {1, 2, 3, 4}
s.add(4)  # 중복 추가 시 무시됨
print(s)  # {1, 2, 3, 4}

2️⃣ .append() (list에서 사용)

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]]  # 리스트 전체가 하나의 요소로 추가됨

3️⃣ .extend() (list에서 사용)

lst = [1, 2, 3]
lst.extend([4, 5])
print(lst)  # [1, 2, 3, 4, 5]  # 리스트의 개별 요소들이 추가됨

🔥 결론

.add() → set에서 사용하며, 중복을 허용하지 않고 요소 추가
.append() → list에서 사용하며, 단일 요소를 추가
.extend() → list에서 사용하며, 다른 리스트의 개별 요소들을 추가

왜 이걸 적게 됬나?

leetcode 의 문제에서

  1. Spiral Matrix
    Given an m x n matrix, return all elements of the matrix in spiral order.
    <- 이거에 대한 정답.(마지막에 .extend함)
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

주의할 점

🔍 .extend()의 특징

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[:])도 가능

profile
Lee_AA

0개의 댓글