CodeGym /행동 /Python SELF KO /리스트 실습

리스트 실습

Python SELF KO
레벨 7 , 레슨 9
사용 가능

9.1 리스트 복사하기

Python에서 리스트의 복사는 리스트를 조작할 때 데이터의 예상치 못한 변화를 방지하기 위해 중요한 작업이야. 리스트를 다룰 때 얕은(shallow) 복사와 깊은(deep) 복사의 차이를 이해하는 것이 중요해.

얕은 복사

얕은 복사는 새로운 리스트를 만들지만, 요소들은 동일하게 남아 (요소들이 참조라면 참조로 복사됨). 이건 여러 방법으로 할 수 있어:

list() 함수를 사용:


original = [1, 2, 3]
copy = list(original)

슬라이싱 사용:


original = [1, 2, 3]
copy = original[:]

copy() 메소드:

깊은 복사

깊은 복사는 모든 중첩된 객체의 복사도 만드는 새로운 리스트를 생성해. 리스트가 다른 변경 가능한 데이터 타입 (예를 들어, 또 다른 리스트)를 포함할 때 매우 중요해. 이 작업은 copy 모듈을 이용해:


import copy
original = [[1, 2], [3, 4]]
deep_copy = copy.deepcopy(original)

각 방법을 언제 사용해야 할까

얕은 복사는 더 빠르고, 리스트 요소들이 간단하거나 중복이 필요하지 않을 때 적합해 (예: 문자열이나 숫자). 깊은 복사는 리스트 요소들이 자기 자신이 변경 가능한 컬렉션일 때나 복사본의 변화가 원본에 영향을 미쳐서는 안 될 때 필요해.

9.2 리스트에서 요소 삭제하기

리스트에서 요소(들)를 삭제하는 것은 간단하면서도 복잡한 작업이야.

리스트를 for 루프를 통해 순회할 때, 리스트는 이터레이터라는 특별한 하위 객체를 반환해. 이터레이터는 for 루프에서 리스트의 모든 요소를 순회하는 데 사용돼. 그리고 이터레이터 [for 루프에서] 사용 중에 리스트에서 요소를 삭제하면, 이터레이터가 잘못 작동할 수 있어.

만약 3번째 요소를 삭제하면, 4번째 요소가 자동으로 3번째 요소가 돼. 그런데 for 루프는 이터레이터를 통해 새로운 4번째 요소로 이동해, 이전에는 5번째 요소였던 것이지. 따라서 이전의 4번째 요소는 놓치게 돼.

안전하게 요소를 삭제하는 몇 가지 방법:

remove() 메소드 사용하기

삭제할 요소가 정확히 알고 있다면, 루프 내에서 remove()를 사용할 수 있어. 하지만 요소가 많다면 비효율적일 수 있어. 왜냐하면 remove()를 호출할 때마다 요소를 찾고 삭제하기 때문에 실행 속도가 느려질 수 있어.

새로운 리스트 생성하기

더 안전한 방법은 유지하려는 요소들만 포함한 새 리스트를 만드는 것이야:


original_list = [1, 2, 3, 4, 5, 6]
new_list = [x for x in original_list if x % 2 != 0]  # 홀수만 유지

인덱스 사용하기

거꾸로 인덱스를 사용하는 for 루프를 써서 요소를 안전하게 삭제할 수 있어:


for i in range(len(original_list) - 1, -1, -1):
    if original_list[i] % 2 == 0:  # 삭제 조건
        del original_list[i]

리스트를 끝에서부터 순회하면, 요소를 삭제해도 이미 지나간 요소들의 인덱스만 변해.

리스트 복사본 사용하기:

모든 음수를 리스트에서 삭제하고 싶다고 치자:


numbers = [1, -1, 2, -2, 3, -3]
# 안전한 순회를 위해 리스트 복사본 생성
for number in numbers.copy():
    if number < 0:
        numbers.remove(number)
print(numbers) # [1, 2, 3] 출력

9.3 리스트 합치기

자주 두 개 이상의 리스트를 하나로 합쳐야 하는 경우가 있어. 각각의 방법은 다양한 작업에 적합하고 고유한 특징을 가지고 있어.

+ 연산자 사용하기

두 리스트를 합치는 가장 간단한 방법은 + 연산자를 사용하는 거야. 이건 직관적이고 간단한 방법이야:


list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined_list = list1 + list2
print(combined_list)  # [1, 2, 3, 4, 5, 6] 출력

extend() 메소드

extend() 메소드는 첫 번째 리스트를 수정하여 두 번째 리스트의 모든 요소를 끝에 추가해. 원래 리스트를 변경해:


list1 = [1, 2, 3]
list2 = [4, 5, 6]
list1.extend(list2)
print(list1)  # [1, 2, 3, 4, 5, 6] 출력

리스트 컴프리헨션 (List Comprehensions)

리스트 컴프리헨션을 사용하여 여러 리스트의 요소를 하나의 복잡한 리스트로 합쳐 새로운 리스트를 만들 수 있어:


list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined_list = [item for sublist in [list1, list2] for item in sublist]
print(combined_list)  # [1, 2, 3, 4, 5, 6] 출력

append() 메소드

두 번째 리스트의 모든 요소를 하나씩 첫 번째 리스트에 추가할 수 있어. 음, 하나의 방법일 수 있지.


list1 = [1, 2, 3]
list2 = [4, 5, 6]
for x in list2:
    list1.append(x)
print(list1)  # [1, 2, 3, 4, 5, 6] 출력

이게 바로 리스트에 관해 내가 너희에게 말하고 싶었던 모든 것이야 😊

2
과제
Python SELF KO, 레벨 7, 레슨 9
잠금
정렬 없이 정렬하기
정렬 없이 정렬하기
2
과제
Python SELF KO, 레벨 7, 레슨 9
잠금
리스트 정리하기
리스트 정리하기
1
설문조사/퀴즈
파이썬의 리스트, 레벨 7, 레슨 9
사용 불가능
파이썬의 리스트
파이썬의 리스트
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION