안녕하세요 오늘은 파이썬 리스트 연산과 수정에 대해서 알아보겠습니다. 리스트 연산 또한 문자열 연산과 동일한 기능을 수행합니다. 리스트를 더하고 반복 할 수 있는데요, 그러면 먼저 아래 예제를 보겠습니다.
리스트는 데이터를 저장하고 수정할 때 많이 사용되기 때문에, 확실하게 알아두면 좋다고 합니다. 그리고 알고리즘 문제를 풀 때 데이터를 담아서 처리를 해야되기 때문에 더더욱 중요하다고 생각이 듭니다. 많이 부족하지만 구름 파이썬 강의를 보고 정리했습니다.
예제 소스코드
evennumbers = [2, 4, 6, 8, 10]
oddnumbers = [1, 3, 5, 7, 9]
numbers = evennumbers + oddnumbers
print(numbers)
print(numbers * 4)
출력 결과
[2, 4, 6, 8, 10, 1, 3, 5, 7, 9]
[2, 4, 6, 8, 10, 1, 3, 5, 7, 9, 2, 4, 6, 8, 10, 1, 3, 5, 7, 9, 2, 4, 6, 8, 10, 1, 3, 5, 7, 9, 2, 4, 6, 8, 10, 1, 3, 5, 7, 9]
문자열 결합에서 "World" + "Hello"를 하면 WorldHello가 출력되는 것과 마찬가지로 자동 정렬이 되는 것이 아닌 그냥 합쳐지게 됩니다.
각 요소들이 합친 숫자가 들어가는게 아니라는 뜻 입니다.
문자열은 lmmutable 타입이기에 인덱싱으로 값을 수정할 수 없으나, 리스트에서는 얼마든지 수정이 가능하다고 합니다.
mutable은 값이 변한다는 뜻이고, immutable은 값이 변하지 않는다는 의미입니다.
먼저 요소를 수정하려면 "리스트 이름[인덱스 값] = 수정값 형식으로 코딩을 합니다. 아래 예제 소스를 보도록 하겠습니다.
예제 소스코드
numbers = [2, 4, 6, 8, 10, 1, 3, 5, 7, 9]
numbers[4] = 100
print(numbers)
numbers[2] = "hello"
print(numbers)
numbers[0] = numbers[9] #인덱스 9를 인덱스 0에 대입
print(numbers)
numbers[8] = ['a', 'b', 'c'] #리스트 전체를 형태 유지하며 대입
print(numbers)
출력 결과
[2, 4, 6, 8, 100, 1, 3, 5, 7, 9]
[2, 4, 'hello', 8, 100, 1, 3, 5, 7, 9]
[9, 4, 'hello', 8, 100, 1, 3, 5, 7, 9]
[9, 4, 'hello', 8, 100, 1, 3, 5, ['a', 'b', 'c'], 9]
인덱스는 1부터 시작을 하는게 아니라 0부터 시작을 한다는 거 아시죠? 그래서 numbers[4] = 100를 해석하자면 숫자 배열에서 5번 째 숫자를 100으로 바꾸겠다 라는 뜻이 됩니다. 그리고 리스트의 요소 값을 인덱싱을 이용해 수정을 할 때, 1대1 대응을 합니다. 그러니 numbers[4] = 100 이렇게 1대1로 진행이 된다는 것 입니다.
하지만 슬라이싱으로 리스트의 값을 수정할 땐 당연하지 않습니다. 아래 예시 코드를 봅시다.
예제 소스코드
numbers = [2, 4, 6, 8, 10, 1, 3, 5, 7, 9]
numbers[4:5] = [80]
print(numbers)
numbers[2:6] = "hello"
print(numbers)
numbers[2:3] = ['a','b','c']
print(numbers)
numbers[8] = ['a', 'b', 'c'] #리스트 전체를 형태 유지하며 대입
print(numbers)
numbers[:] = [1]
print(numbers)
출력 결과
[2, 4, 6, 8, 80, 1, 3, 5, 7, 9]
[2, 4, 'h', 'e', 'l', 'l', 'o', 3, 5, 7, 9]
[2, 4, 'a', 'b', 'c', 'e', 'l', 'l', 'o', 3, 5, 7, 9]
[2, 4, 'a', 'b', 'c', 'e', 'l', 'l', ['a', 'b', 'c'], 3, 5, 7, 9]
[1]
number[4:5]는 인덱스 4만 가지고 오지만, 리스트로 판단되기 때문에, 슬라이싱으로 값을 수정할 땐 단일 값이 아닌 리스트로 대입을 해야 합니다.
number[2:6] ="hello" 에서 "hello"는 하나의 문자열이자 문자 집합입니다. 따라서 슬라이싱으로 값을 대입할 때 슬라이싱한 범위에 문자열의 문자를 순차적으로 하나씩 대입합니다.
numbers[2:3] = ['a','b','c']와 같이 슬라이싱한 범위에 리스트를 넣으면 대입할 리스트의 구성 요소들이 numbers에 완전히 포함이 됩니다. 그러나 numbers[8] = ['a','b','c']는 리스트 내 리스트 형태로 수정되었습니다. 인덱싱과 슬라이싱의 차이점을 볼 수 있습니다.
리스트에서 요소만 삭제하려면 인덱싱과 슬라이싱으로 기존 요소를 빈칸으로 수정하면 됩니다. 예를 들어서 a[4] = "", 슬라이싱은 a[1:3] = [] 으로 입력을 한다면 공백으로 남게 됩니다.
예제 소스코드
numbers = [2, 4, 6, 8, 10, 1, 3, 5, 7, 9]
#값만 삭제
numbers[3] = ""
print(numbers)
출력 결과
[2, 4, 6, '', 10, 1, 3, 5, 7, 9]
del 키워드를 통해서 삭제가 가능합니다, 하지만 del 키워드는 객체 자체를 삭제한다는 차이를 가집니다.
예제 소스코드
numbers = [2, 4, 6, 8, 10, 1, 3, 5, 7, 9]
a = "goorm"
#공간까지 삭제
del numbers[4]
print(numbers)
del numbers[:5]
print(numbers)
#객체 자체를 삭제
del a
출력 결과
[2, 4, 6, 8, 1, 3, 5, 7, 9]
[3, 5, 7, 9]
del 키워드는 위의 출력 값을 본다면, 공간을 삭제합니다. 그러니 빈 공간으로 남아두는 게 아니라, 리스트의 크기가 줄어들게 된다는 것 입니다.
긴 글 읽어주셔서 감사합니다 :)
출처 : goormedu 바로 실행하면서 배우는 파이썬 3
'언어 공부 > Python' 카테고리의 다른 글
[Python] 04. 값의 집합 리스트 (0) | 2021.01.15 |
---|---|
[Python] 03. 기본적인 자료형과 연산자 (0) | 2019.08.30 |
[Python] 02. 파이썬의 변수 선언과 초기화 (2) | 2019.08.29 |
[Python] 01. 왜 파이썬을 사용하는가? (0) | 2019.08.28 |
댓글