본문 바로가기
언어 공부/Python

[Python] 5. 리스트 연산과 수정

by 안다니. 2021. 1. 16.
반응형

파이썬 리스트 연산과 수정

 

  안녕하세요 오늘은 파이썬 리스트 연산과 수정에 대해서 알아보겠습니다. 리스트 연산 또한 문자열 연산과 동일한 기능을 수행합니다. 리스트를 더하고 반복 할 수 있는데요, 그러면 먼저 아래 예제를 보겠습니다.

 

  리스트는 데이터를 저장하고 수정할 때 많이 사용되기 때문에, 확실하게 알아두면 좋다고 합니다. 그리고 알고리즘 문제를 풀 때 데이터를 담아서 처리를 해야되기 때문에 더더욱 중요하다고 생각이 듭니다. 많이 부족하지만 구름 파이썬 강의를 보고 정리했습니다.

 

예제 소스코드
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

 

 

 

 

반응형

댓글