본문 바로가기

코딩관련/파이썬 문법

리스트

  리스트 생성

     - 리스트의 인덱스는 0부터 시작을 하며, 리스트 선언은 list() 혹은[] 를 이용한다.

  # 비어있는 리스트 선언 방법1
  a = list()

  # 비어있는 리스트 선언 방법2
  a = []

  # 인덱스를 통한 원소 접근
  a = [1,2,3,4,5]
  print(a[3])  # 인덱스가 0부터 시작하므로 4가 출력이 됨

  # 크기가 n이며, 원소의 값이 모두 0인 1차원 리스트 생성
  n = 7
  a = [0]*n
  print(a)    # [0,0,0,0,0,0,0] 이 출력

 

○ 리스트 인덱싱, 슬라이싱

     - 인덱스값을 통한 리스트 접근을 하는 것을 인덱싱이라고 한다.(음의 정수도 사용 가능)

     - 리스트 내에서 연속적인 위치에 있는 원소 값들을 가져올 때 슬라이싱을 이용한다.(대괄호 안에 :를 넣어 사용)

  a = [1,2,3,4,5]

  # 뒤에서 첫 번째 원소 출력
  print(a[-1])

  # 뒤에서 세 번째 원소 출력
  print((a[-3])

  # 두 번째 원소 값 바꾸기
  a[1] = 7
  print(a)   # [1,7,3,4,5]로 출력

  # 슬라이싱을 통한 두 번째 원소부터 4번째 원소까지 출력
  print(a[1:4])  # 인덱스는 0부터 시작이고 :다음의 값은 그 값의 미만을 나타냄

 

○ 리스트 컴프리헨션

     - 리스트를 초기화하는 방법 중 하나.(직관적으로 리스트를 생성)

     - 대괄호로 감싸고 내부에 for문과 if 문을 사용하여 반복하며 조건에 만족하는 것만 리스트로 생성을 함

     - 여러 줄을 쓸 것을 한 줄로 표현하여 직관적이며, 속도도 더 빠르기 때문에 사용함.

  # 0부터 10까지의 수 중에서 홀수만을 포함하는 리스트
  a = [i for i in range(11) if  i % 2 == 1]   # a=[1,3,5,7,9]

  # 위의 소스코드를 일반적인 소스코드로 작성
  a = []
  for i in range(11):
      if i % 2 == 1:
           a.append(i)

  # 1 ~ 9 까지의 수의 제곱 값을 나타내는 리스트
  a = [i * i for i in range(1,10)]  # a = [1,4,9,16,25,36,49,64,81]

  # N*M 크기의 2차원 리스트 초기화 방법
  n = 5
  m = 5
  a = [[0] * m for _ in range(n)]  # a = [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

  # 조건문(if)을 쓸 경우 => if문만 쓸 경우 오른쪽, if else문을 쓸 때는 왼쪽에 사용함

  [i for i  in range(5) if i %2 == 0 if i % 4 == 0]  # 출력은 [0,4]가 출력이 됨.
  # if 두 개를 사용할 경우 and 조건으로 되어서 출력됨.

  [i if i %2 == 0 else 'yes' for i in range(5)]  # [0, 'yes', 2, 'yes', 4]
  # i if i %2 == 0 : i가 2로 나누어지면 i 출력,  else 'yes' : 그 외는 yes 출력

  [i if i %2 == 0 else 'yes' if i==1 else 'no' for i in range(5)]  # [0, 'yes', 2, 'no', 4]
  # if else 문은 여러 개 사용 가능하며, elif와 같은 효과를 준다.

  # 이중 for 문
  [(i,j) for i in range(2) for j in range(3)]  # [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]
 
  # 그 외 집합 컴프리헨션, 딕셔너리 컴프리헨션도 할 수 있음
  {i for i in range(5)}  # {0,1,2,3,4}
  {i : i for i in range(5)}  # {0: 0, 1: 1, 2: 2, 3: 3, 4: 4} 

      ※ 2차원 리스트를 초기화 할 때는 반드시 리스트 컴프리헨션을 사용해야 함.

      ※ 파이썬에서는 언더바는 반복을 수행하되 반복을 위한 변수의 값을 무시하고자 할 때 주로 사용함.

 

○ 리스트 관련 함수(메소드)

함수명 표현 설명
시간 복잡도
append() 변수명.append() 리스트에 원소를 하나 삽입할 때 사용
O( 1 )
sort() 변수명.sort() 정렬 기능, 오름차순
O(NlogN)
변수명.sort(reverse=True) 내림차순 정렬
reverse() 변수명.reverse() 리스트의 원소의 순서를 모두 뒤집어 놓는다.
O( )
insert() 변수명.insert(인덱스, 삽입값) 특정한 인덱스 위치에 원소값을 삽입할 때 사용
O( )
count() 변수명.count(값) 리스트에서 특정한 값을 가지는 데이터 갯수를 셀 때 사용
O( )
remove() 변수명.remove(값) 특정한 값을 갖는 원소를 제거하는데 사용, 값을 가진 원소가 여러 개면 하나만 제거
O( )

  ※ insert(), remove()의 경우 원소를 삽입 또는 삭제 후 원소 위치를 조정해주어야 하므로 시간 복잡도가 O( )이다.

     따라서 남발하게 되면 코딩테스트시 '시간 초과'가 될 수도 있다. 아래 소스는 특정한 값을 가지는 모든 원소를 제거하는 방법이다.

  a = [1,2,3,4,5,5,5]
  remove_set = {3,5}

  result = [ i for i in a if i not in remove_set]   # result = [1,2,4]

'코딩관련 > 파이썬 문법' 카테고리의 다른 글

Join  (0) 2021.06.24
global, lambda  (0) 2021.06.02
입출력  (0) 2021.05.31
튜플형, 사전형, 집합형  (0) 2021.05.30
수 자료형  (0) 2021.05.30