/
코딩테스트를 독학으로 준비하는 분들을 위한 자료구조 강의 입니다.
많은 도움이 되길 바랍니다.
코딩샐러드


1. 파이썬의 리스트(List) 란?

1) 정의
비슷한 성질을 가진 item 들의 묶음으로 앞으로 배우게 될 스택(stack) 그리고 큐(queue)를 이해하는데 기초가되는 자료구조 입니다.

2) 특징
파이썬의 리스트는 다른 언어의 리스트와 차이가 있다는 점을 기억하셔야 합니다.
C언어에서 사용하는 배열 처럼 연속된 메모리 공간을 차지하고 인덱스에 접근이 가능 하지만,
C언어의 배열과 다르게 추가/삭제/연산에 편리한 append,pop,extend 등의 함수를 이용할 수 있습니다.



2. 리스트 만드는 방법
파이썬에서 리스트를 선언해줄 때 대괄호를 사용하거나, list() 으로 비어있는 리스트를 만들 수 있습니다
1) 비어있는 리스트 만들기
list_a = list()
라고 선언을 하면 list_a 라는 비어있는 리스트가 생성되는 것 입니다.

>>> list_a = list() # list_a = [] 로 사용해도 같은 의미
>>> type(list_a)
<type 'list'>
>>> list_b = []
>>> type(list_b)
<type 'list'>
>>> print(list_a)
[] # 비어있음
>>> print(list_b)
[] # 비어있음
>>> if list_a == list_b :
...     print(True)
...
True​


2) 값이 들어있는 리스트 만들기
대괄호 안에 콤마 ',' 로 구분지어 여러개의 값을 저장할 리스트를 만들수 있습니다.

>>> list_c = ['a','b','c']
>>> print(list_c)
['a', 'b', 'c']​


리스트안에 item은 문자열,숫자형자료,리스트 등 통일되지 않은 자료형을 묶어 사용할 수 있습니다.

list_d = [1,'Hello',[1,2]]
>>> print(list_d)
[1, 'Hello', [1, 2]]
>>>​


3. 리스트 Index / 인덱스와 슬라이싱

1) 인덱스(index)
이번에는 리스트의 Index에 대해서 알아보겠습니다. 문자열과 같이 index로 접근이 가능합니다.

[1,2,3] 값을 갖는 A 리스트를 예로 들어 확인해보겠습니다.

>>> A
[1, 2, 3]
>>> A[0]
1
>>> A[1]
2
>>> A[2]
3
>>> A[1]+A[2]
5
>>> A[1]+A[0]
3


2) 슬라이싱(slicing)

아래와 같은 리스트가 있을 때 0번~3번까지만 출력하고 싶은 경우에 인덱스를 활용하여 간단하게 출력할 수 있습니다.
리스트[start:end+1] 0~3 을 출력하는 경우에는 [0:4] 로 출력하면 됩니다.

그리고 [-1] 을 출력해보면 제일 마지막 요소인 32가 출력되는 것을 확인할 수 있습니다.

>>> A = [1,2,4,8,16,32]
>>> A
[1, 2, 4, 8, 16, 32]
>>> A[0:4]
[1, 2, 4, 8] # 0~3번 인덱스에 해당하는 값 출력
>>> A[3:6]
[8, 16, 32] # 3~5번 인덱스에 해당하는 값 출력
>>> A[-1]
32


4.리스트에 값 추가 하기

1) append(value)
비어있는 리스트에 append()를 사용해 값을 추가할 수 있습니다.
append를 할 때에는, 리스트의 마지막 item 뒤에 추가됩니다.

>>> A = list() # Empty 리스트를 생성
>>> print(A)
[]
>>> A.append(1) # 1 추가
>>> A.append(2) # 2 추가
>>> A.append(3) # 3 추가
>>> print(A)
[1, 2, 3]


2) insert(index,value)
append() 경우에는 마지막 item 뒤에 추가가 되지만, insert의 경우에는 index 값을 통해 원하는 위치에 추가를 할 수 있습니다.

>>> A
[1, 2, 3]
>>> A.insert(1,100)
>>> A.insert(3,200)
>>> A
[1, 100, 2, 200, 3]
>>>


5.리스트 값 삭제 하기

1) remove(val)
입력된 val 값에 해당되는 첫번째 요소가 삭제 됩니다.

>>> B=[1,2,3,4,1,2,3]
>>> B.remove(1)
>>> B
[2, 3, 4, 1, 2, 3]
>>> B.remove(1)
>>> B
[2, 3, 4, 2, 3]
>>>



2) pop(index)
인덱스 값을 입력하지 않고 pop()을 수행하면 리스트의 마지막 item을 return하고 해당 item은 삭제됩니다.

>>> B
[2, 3, 4, 2, 3]
>>> B.pop()
3 # 맨 마지막 item을 return 
>>> B
[2, 3, 4, 2] # 맨 마지막 item이 삭제되었음
>>> B.pop()
2 # 맨 마지막 item을 return 
>>> B
[2, 3, 4] # 맨 마지막 item이 삭제되었음

pop(index) 로 삭제하는 경우에는 index에 해당되는 item이 return 되고 삭제 됩니다.

>>> B=[2, 3, 4, 2, 3]
>>> B
[2, 3, 4, 2, 3]
>>> B.pop(2)
4
>>> B
[2, 3, 2, 3]
>>> B.pop(-1)
3
>>> B
[2, 3, 2]
>>> B.pop(0)
2
>>> B
[3, 2]


6. List.count(value)
리스트 안에 value와 같은 item이 몇 개 있는지 return 합니다.

>>> fruits = ['orange', 'apple', 'pear', 'banana', 'kiwi', 'apple', 'banana']
>>> fruits.count('apple') 
2                         # apple 이라는 item은 2개 임
>>> fruits.count('tangerine')
0                        # tangerine이라는 item은 0개 임

7. List.Index(value)
item이 갖는 값이 인자 값 으로 들어오는 value 값과 같은 첫 번째 index를 return 합니다.
만약에 value 에 해당하는 값이 없는 경우에는 ValueError 가 발생합니다.

>>> fruits = ['orange', 'apple', 'pear', 'banana', 'kiwi', 'apple', 'banana']
>>> fruits.index('banana')
3                        # banana라는 값을 가진 item의 첫번째 index는 '3'
>>> fruits.index('banana', 4)
6                        # 4번 인덱스로 부터 banana라는 값을 가진 item의 첫번째 index는 '6'

8. List.sort()

리스트에 있는 item들을 정렬 합니다.

>>> fruits
['banana', 'apple', 'kiwi', 'banana', 'pear', 'apple', 'orange', 'grape']
>>> fruits.sort()        # 정렬
>>> fruits
['apple', 'apple', 'banana', 'banana', 'grape', 'kiwi', 'orange', 'pear'] # 알파벳 순서대로 정렬이 진행 됨

9. List.reverse()

리스트에 있는 item 값 순서를 반전 시킵니다.

>>> fruits
['banana', 'apple', 'kiwi', 'banana', 'pear', 'apple', 'orange', 'grape']

>>> fruits.reverse()     # reverse 를 하면 리스트 안 Item들의 순서가 변경 됨.
>>> fruits
['banana', 'apple', 'kiwi', 'banana', 'pear', 'apple', 'orange']
>>> fruits.append('grape') # grape을 추가

​

​



10. 마무리

이번 글 에서는 파이썬의 리스트에 대해서 알아보았습니다. 앞으로 배우게 될 스택,큐를 이해하려면 리스트를 정확하게 알아야 쉽게 따라 갈 수 있습니다. 다음 강의에서는 리스트를 활용하여 스택(Stack)에 대해 알아보겠습니다.

질문 사항이 있으시면 댓글또는 쪽지 남겨주세요 언제나 환영입니다. :)

+ Recent posts