본문 바로가기
프로그래밍 언어/Python

[Python] 파이썬 리스트 자료형 정리

by Kallunar 2023. 10. 19.

1. 빈 리스트 선언

l = list()

# 또는

l = []

 

2. 크기가 n인 1차원 리스트를 0으로 초기화

n = 10
l = [0] * n # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

 

3. 인덱싱(indexing)

  • 리스트의 원소(element)에 접근하기 위해 인덱스(index)를 이용한다.
  • 인덱스는 0부터 시작하며, 따라서 기본적으로 인덱스의 범위는 0 ~ (리스트의 길이 - 1)이다.
  • 파이썬에서는 음수를 인덱스로 이용할 수 있으며, -1은 가장 마지막 원소의 인덱스이다.
l = [1, 2, 3, 4]
l[0] # 1
l[1] # 2
l[2] # 3
l[3] # 4
# l[4] -> index out of range error!

l[-1] # 4
l[-2] # 3
l[-3] # 2
l[-4] # 1

 

4. 슬라이싱(slicing)

  • 슬라이싱을 이용하여 리스트에서 일정 범위의 원소에 한 번에 접근할 수 있다.
  • 리스트명[시작 인덱스 : 끝 인덱스] 형태로 사용하며, 시작 인덱스의 값은 포함하지만 끝 인덱스의 값은 포함하지 않는다.
  • 원소가 하나일지라도 리스트 형태로 가져온다는 점에 주의한다.
l = [1, 2, 3, 4, 5]
l[0:3] # [1, 2, 3]
l[3:4] # [4]

 

5. 리스트 컴프리헨션(list comprehesion)

  • 리스트를 초기화 하는 방법 중 하나로, 대괄호 안에 조건문과 반복문을 넣는 방식으로 사용한다.
# 1부터 9까지의 값으로 리스트 초기화하기
l = [i for i in range(1, 10)] # [1, 2, 3, 4, 5, 6, 7, 8, 9]

# 1 ~ 10까지의 숫자 중 짝수만으로 초기화 하기
list2 = [i for i in range(1, 10) if i % 2 == 0] # [2, 4, 6, 8]

# N x M 크기의 2차원 리스트 0으로 초기화 하기
n = 3
m = 4
list3 = [[0] * m for _ in range(n)] # [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

 

6. 리스트 관련 메서드(method)

  • append(element) : 리스트의 가장 마지막에 element 추가
  • insert(idx, element) : 리스트의 idx 위치에 element 삽입
  • remove(element) : 리스트에서 가장 먼저 나온 element를 제거
  • sort() : 오름차순 정렬. 매개변수로 'key = 함수' 와 같이 주면 정렬 기준도 설정 가능.
  • sort(reverse=True) : 내림차순 정렬
  • reverse() : 리스트의 원소를 순서를 거꾸로 뒤집어 놓음.
  • count(value) : 리스트 내 value 의 개수를 셈.
  • enumerate(리스트) : 리스트 내 원소들에 대하여 (인덱스, 원소) 쌍을 반환
l = [1, 2, 3]
l.append(5) # [1, 2, 3, 5]
l.insert(0, 9) # [9, 1, 2, 3, 5]
l.sort() # [1, 2, 3, 5, 9]
l.remove(9) # [1, 2, 3, 5]

l2 = [5, 2, 8, 1]
l2.reverse() # [1, 8, 2, 5]
l2.count(1) # 1

result = enumerate(l2)
for pair in result:
  print(pair)
# (0, 1)
# (1, 8)
# (2, 2)
# (3, 5)

 

7. 리스트 안에 특정 원소가 있는지 확인하기

  • 'in' 또는 'not in' 키워드를 활용한다.
l = [1, 2, 3, 4, 5]
if 1 in l: # 1이 l 안에 있으면 '1은 l의 원소임 ㅇㅇ' 출력
  print('1은 l의 원소임 ㅇㅇ') 
# 1은 l의 원소임 ㅇㅇ 출력됨

if 6 in l: # 6이 l 안에 있으면 '6은 l의 원소임 ㅇㅇ' 출력
  print('6은 l의 원소임 ㅇㅇ') 
# 아무것도 출력 안 됨
  
if 6 not in l: # 6이 l 안에 "없으면", '6은 1의 원소 아님 ㅇㅇ' 출력
  print('6은 l의 원소 아님 ㅇㅇ') 
# 6은 1의 원소 아님 ㅇㅇ 출력됨

 

7. 리스트 자료형 사용 시 유의할 점

※ 리스트(list) vs. 배열(array)
  - 리스트 : 특정 원소(element)가 삭제되면 그 뒤에 있던 원소들이 저절로 앞으로 한 자리씩 옮겨진다.
  - 배열 : 특정 원소(element)가 삭제되면 그 자리만 빈칸으로 남은 채 형태가 유지된다.

 
  파이썬에서는 기본적으로 리스트 자료형만 제공하며, 이는 배열과 다른 특성을 가지므로 사용에 유의해야 한다.

  가령 리스트 내에서 짝수만 제거한 결과를 얻고자 하여 반복문을 사용해 직접적으로 그 값들을 제거하려 한다면, 코드에 따라서는 아래 예시처럼 에러를 마주하게 될 수 있다.

따라서 웬만하면 해당 원소들을 제외한 나머지 원소를 새로운 리스트에 담아내는 방식으로 제거한 결과를 얻어내는 것이 편리하다.

l = [1, 2, 3, 4, 5, 6]
# for i in range(6):
#  if l[i] % 2 == 0:
#    l.remove(l[i])
# IndexError: list index out of range!

# i = 1 일 때, l[1]에 해당하는 2가 제거되어 l = [1, 3, 4, 5, 6]
# i = 2 일 때, l[2]에 해당하는 4가 제거되어 l = [1, 3, 5, 6]
# i = 3 일 때, l[3]에 해당하는 6이 제거되어 l = [1, 3, 5]
# i = 4 일 때, l[4]에 해당하는 값이 없으므로 index out of range 에러 발생

odd_list = []
for i in range(6):
  if l[i] % 2 != 0:
    odd_list.append(l[i])

print(odd_list) # [1, 3, 5]

 

댓글