1. 리스트의 형식
파이썬에서 리스트를 생성하는 방법은 대괄호 []에 자료를 쉼표로 구분하여 사용합니다.
[] 대괄호 내부에 넣는 자료 하나하나를 요소 (element)라고도 합니다.
리스트 = [요소, 요소, 요소 ... ]
2. 리스트의 특징
리스트는 요소로 여러 여러 자료형을 구성할 수 있습니다.
정수만 있는 리스트 [1, 2, 3, 4] Boolean형만 있는 리스트 [True, False] 한번에 여러 자료형이 있는 리스트 [1, 2, True, False, "문자열"]
3. 리스트 요소의 위치 (양수)
리스트 안에 있는 요소들을 사용하려면 리스트 변수 이름 바로 뒤에 대괄호 []를 입력하고, 자료의 위치를 나타내는 숫자를 입력하면 됩니다.
list_a = [273, 10, 5, True, False, "문자열"]
위와 같은 리스트가 있다고 예를 들면, 각 요소들은 아래와 같이 위치가 지정됩니다.
273 | 10 | 5 | True | False | 문자열 |
list_a[0] | list_a[1] | list_a[2] | list_a[3] | list_a[4] | list_a[5] |
4. 리스트 요소의 위치 (음수)
문자열 위치를 음수로 뒤에서부터 선택하는 방법과 동일하게 리스트도 대괄호 안에 음수를 넣어서 요소를 선택할 수 있습니다.
list_a = [273, 10, 5, True, False, "문자열"]
위의 리스트를 음수로 뒤에서부터 위치를 확인하면
273 | 10 | 5 | True | False | 문자열 |
list_a[-6] | list_a[-5] | list_a[-4] | list_a[-3] | list_a[-2] | list_a[-1] |
마지막에 있는 리스트는 항상 인덱스가 [-1]로 되어있다는 점을 숙지해놓는 것이 좋겠습니다.
5. 리스트 이중 접근방법
아래와 같은 문자열이 있다고 있다고 할 때 list_a[5]를 지정하면 "문자열"이 나오게 됩니다.
list_a = [273, 10, 5, True, False, "문자열"]
리스트는 이 "문자열"에서 각각의 문자인 "문", "자", "열"에 접근할 수 있습니다.
list_a[5][0], list_a[5][1], list_a[5][2]로 각각 지정하면 '문', '자', '열'을 추출할 수 있습니다.
list_a[5] | list_a[5][0] | list_a[5][1] | list_a[5][2] |
문자열 | 문 | 자 | 열 |
6. 리스트는 내부에 리스트를 또 선언할 수 있다
타이틀 그대로 리스트는 내부 요소에 리스트를 또 지정해줄 수 있습니다.
list_a = [[1,2,3], [4,5,6], [7,8,9]]
위와 같이 리스트 내의 각 요소들 안에 리스트를 만들 수 있습니다.
각 요소들을 불러오면 출력되는 output은 아래 표와 같습니다.
list_a[0] | list_a[1] | list_a[2] |
[1,2,3] | [4,5,6] | [7,8,9] |
앞에서 "문자열"의 각 한 문자씩 추출하는 방법과 동일한 방법으로 리스트 내에 있는 요소들을 하나씩 불러올 수도 있습니다.
list_a의 [0] 요소 내에 있는 요소들은 아래와 같고
list_a[0][0] | list_a[0][1] | list_a[0][2] |
1 | 2 | 3 |
list_a의 [1] 요소 내에 있는 요소들은 아래와 같으며
list_a[1][0] | list_a[1][1] | list_a[1][2] |
4 | 5 | 6 |
list_a의 [2] 요소 내에 있는 요소들은 아래와 같습니다.
list_a[2][0] | list_a[2][1] | list_a[2][2] |
7 | 8 | 9 |
7. 리스트 연산자
list_a = [1, 2, 3] list_b = [4, 5, 6]
7.1 리스트 연결연산자 (+)
위에 두 리스트가 선언되어 있다고 했을 때 이 두 리스트를 합칠 때 사용하는 연산자가 바로 '+' 연결연산자 입니다.
print(list_a + list_b)
위 처럼 두 리스트를 덧셈(?)하면 어떻게 출력되는지 확인해보시면
>> [1, 2, 3, 4, 5, 6]
으로 출력이 나타납니다.
이는 list_a, list_b 원래 리스트에는 영향을 주지 않으면서, 연결 연산자를 통해 두 리스트를 합친 것을 출력할 수 있습니다.
7.2 리스트 반복연산자 (*)
리스트 반복연산자를 통해서는 한 개의 리스트를 반복해서 리스트 내에 표시할 수도 있습니다.
print(list_a * 3)
위와 같이 list_a를 곱하기(?) '3'을 해주면 list_a 리스트가 3번 반복되어 나타나는 것을 확인할 수 있습니다.
출력 >> [1, 2, 3, 1, 2, 3, 1, 2, 3]
반복 연산자도 덧셈 연산자와 마찬가지로 원래의 list_a 리스트에는 영향을 주지않으면서 리스트 list_a가 반복된 리스트 출력을 나타낼 수 있습니다.
7.3 리스트 길이 (len())
len() 함수는 문자열의 길이를 출력해줄 뿐만 아니라, 리스트의 길이까지 세어줄 수 있습니다.
print("list_a의 길이는 {}입니다.".format(len(list_a))) print("list_b의 길이는 {}입니다.".format(len(list_b)))
위와 같이 list의 길이를 직접 print해서 콘솔에 출력해보면
출력 >> list_a의 길이는 3입니다. 출력 >> list_b의 길이는 3입니다.
각 list의 길이 즉, 요소의 갯수를 알 수 있습니다. 그렇다면 list_a와 list_b를 연결한 리스트의 길이는 6개로 나타겠죠?
8. 리스트 요소 추가하기
8.1 append (리스트 마지막에 한 개의 요소만 추가하기)
append는 요소를 추가하는데 리스트의 뒤에서부터 추가하는 함수입니다.
리스트명.append(요소)
아래와 같이 [1, 2, 3]을 요소로 갖는 리스트가 있다고 할 때
list_a = [1, 2, 3]
이 리스트 뒤에 4와 5를 추가해주고 싶다고 하면
list_a.append(4) # 리스트 맨 뒤에 4를 추가해주기 list_a.append(5) # 리스트 맨 뒤에 5를 추가해주기
append함수를 실행시켜서 list_a에 4, 5를 차례대로 추가해줄 수 있습니다. 이 이상태로 list_a를 다시 출력해보면 아래와 같이 나타납니다.
>> [1, 2, 3, 4, 5,]
8.2 insert (원하는 위치에 한 개의 요소만 추가하기)
insert는 요소를 추가할 때 직접 위치를 지정해서 추가해줄 수 있는 함수입니다.
리스트명.insert(위치, 요소)
append 함수를 설명하기 위해 만들어 둔 리스트 list_a를 가지고 와서 직접 테스트를 해보겠습니다.
list_a의 요소인 1, 2, 3 중에서 1과 2사이에 10을 넣는다고 가정하면 insert는 아래와 같이 실행시켜야 합니다.
list_a.insert(1, 10)
위치 1에 요소 10을 직접 넣겠다는 의미로 아래 표를 가지고 기존 리스트와 비교하면
기존 list_a
list_a[0] | list_a[1] | list_a[2] |
0 | 1 | 2 |
위치 1에 요소 10을 추가한 후의 list_a
list_a[0] | list_a[1] | list_a[2] | list_a[3] |
0 | 10 | 1 | 2 |
위의 표와 같이 위치 1에 10을 넣게 되면 기존에 list_a[1]에 있던 요소 '1'은 list_a[2]로 밀려나고 list_a[1]에 10이 끼어들어가게 됩니다.
8.3 extend (리스트 마지막에 원하는 요소'들'을 한번에 추가하기)
요소 하나씩 추가하는 append, insert와는 날리 한번에 여러 요소를 추가해 줄 수 있는 함수가 extend 함수입니다.
extend함수는 매개변수로 리스트를 받아오는데 직접 리스트 요소를 넣어보면 추가되는 것을 확인할 수 있습니다.
리스트명.extend(추가할 리스트)
앞에서 설명하기 위한 list_a를 또 가져와 보겠습니다. 요소는 [1, 2, 3]입니다.
여기에 이어서 [4, 5, 6]을 한번에 추가해주고 싶을 때 append를 사용했다면 아래와 같이 세 번 append를 사용할텐데
list_a.append(4) list_a.append(5) list_a.append(6)
extend를 사용하면 [4, 5, 6]을 직접 extend에 넣어주어 같은 결과를 낼 수 있습니다.
list_a.extend([4, 5, 6])
즉, extend 함수는 여러 개의 리스트 요소를 한번에 넣어 줄 때 사용하며, 또한 기존 리스트에 직접 리스트를 추가하는 하는 것으로써 기존 리스트에 영향을 주지않는 + 연결 연산자와는 차이가 있습니다.
>> [1, 2, 3, 4, 5, 6]
9. 리스트 요소 제거하기
list_a = [1, 2, 3, 4, 5, 6]
9.1 del (리스트 요소를 인덱스(위치)로 제거하기)
del 키워드는 리스트명의 인덱스를 직접 지정하거나 범위 선택 연산자를 통해서 여러 리스트를 제거할 수 있습니다.
del 리스트명[인덱스]
위의 list_a 리스트의 인덱스 [1]을 지워보겠습니다.
del list_a[1]
위와 같이 list_a 위치 [1]의 요소를 지우게 되면 [1]에 있던 요소 '2'가 사라지는 것을 알 수 있습니다.
>> [1, 3, 4, 5 ,6]
또한, 범위 선택 연산자 : 를 통해서 범위를 지정하여 리스트를 제거해줄 수도 있는데요. 위치 0 ~ 2까지의 요소를 한번에 삭제해보겠습니다.
del list_a[:3]
위와 같은 : 범위 선택연산자를 통해서 list_a의 요소를 삭제해보면 list_a는 아래와 같이 출력됩니다.
>> [4, 5, 6]
9.2 pop (리스트 요소를 인덱스(위치)로 제거하기)
pop 함수는 제거할 요소의 위치를 매개변수로 받아들여 그 위치에 있는 요소를 제거할 때 사용합니다. 매개변수를 입력하지 않고 pop()으로 실행하면 요소 마지막에 있는 요소가 지워지니 이 부분도 숙지하시면 편할 것 같네요.
리스트명.pop(인덱스)
9.3 clear (리스트 요소 전체 다 제거하기)
리스트 전체를 지울 때는 clear() 함수를 사용합니다.
리스트명.clear()
list_a.clear()
list_a의 요소를 전체 삭제하기 위해 clear()를 실행하면 아래와 같이 출력됩니다.
>> []
리스트 변수이지만 리스트 내에 요소는 아무것도 없는 상태가 되는 것을 확인할 수 있습니다.
9.4 remove (리스트 요소를 값으로 제거하기)
remove 함수는 del, pop() 함수와는 다르게 리스트 내에 있는 값을 직접 삭제하는 함수입니다. 단, 동일한 값이 리스트 내에 중복되어 있을 수 있는데 이럴 때는 위치가 가장 앞에 있는 요소를 삭제하오니 주의하시길 바랍니다.
리스트명.remove(삭제할 값)
remove의 특성을 확인하기 위해 중복되는 값이 있는 리스트를 하나 만들어 보겠습니다.
list_a = [1, 2, 3, 5, 4, 3, 3, 6]
보시다시피 '3' 이라는 요소가 3개나 들어있네요. 바로 확인해보기 위해 remove를 통해서 값 '3'을 없애보겠습니다.
list_a.remove(3)
요소 '3'을 없애기 위해 위와 같이 함수를 실행하면 list_a는 어떻게 변했을까요?
출력 >> [1, 2, 5, 4, 3, 3, 6]
앞에서 설명드린 것과 같이 중복되는 값의 요소가 여러개 있을 때에는 리스트 위치 가장 앞에 있는 요소부터 삭제된다고 말씀드렸습니다. 직접 print해서 확인을 해보시면 위와 같이 1, 2 다음에 '3'이 있던 요소가 없어지는 것을 확인하실 수 있습니다.
저도 공부하는 입장이라 설명하기에 부족함이 많습니다. 양해를 부탁드립니다.🙏
제가 정리한 내용이 읽어주신 분들께 조금이나마 도움이 되었으면 합니다.