Python

[Python] 리스트

소혜아빠 2021. 1. 15. 21:44

1. 리스트의 형식

파이썬에서 리스트를 생성하는 방법은 대괄호 []에 자료를 쉼표로 구분하여 사용합니다.

[] 대괄호 내부에 넣는 자료 하나하나를 요소 (element)라고도 합니다.

리스트 = [요소, 요소, 요소 ... ]

2. 리스트의 특징

리스트는 요소로 여러 여러 자료형을 구성할 수 있습니다.

정수만 있는 리스트
[1, 2, 3, 4]

Boolean형만 있는 리스트
[True, False]

한번에 여러 자료형이 있는 리스트
[1, 2, True, False, "문자열"]

 

3. 리스트 요소의 위치 (양수)

리스트 안에 있는 요소들을 사용하려면 리스트 변수 이름 바로 뒤에 대괄호 []를 입력하고, 자료의 위치를 나타내는 숫자를 입력하면 됩니다.

list_a = [273, 10, 5, True, False, "문자열"]

위와 같은 리스트가 있다고 예를 들면, 각 요소들은 아래와 같이 위치가 지정됩니다.

273105TrueFalse문자열
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, "문자열"]

위의 리스트를 음수로 뒤에서부터 위치를 확인하면

273105TrueFalse문자열
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]
123

list_a의 [1] 요소 내에 있는 요소들은 아래와 같으며 

list_a[1][0]list_a[1][1]list_a[1][2]
456

list_a의 [2] 요소 내에 있는 요소들은 아래와 같습니다.

list_a[2][0]list_a[2][1]list_a[2][2]
789

 

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]
012

위치 1에 요소 10을 추가한 후의 list_a

list_a[0]list_a[1]list_a[2]list_a[3]
01012

위의 표와 같이 위치 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'이 있던 요소가 없어지는 것을 확인하실 수 있습니다.

 

저도 공부하는 입장이라 설명하기에 부족함이 많습니다. 양해를 부탁드립니다.🙏

제가 정리한 내용이 읽어주신 분들께 조금이나마 도움이 되었으면 합니다.