본문 바로가기

프로그래밍/Python

파이썬 속성문법_자료형(리스트_2) + 리스트 메서드

  특정 크기의 2차원 리스트를 초기화 할 때는 반드시 리스트 컴프리헨션을 이용해야 한다. 

 만약에 다음과 같이 N x M 크기의 2차원 리스트를 초기화한다면, 의도하지 않은 결과가 나올 수 있다.

 

 # N x M 크기의 2차원 리스트 초기화 (잘못된 방법)

   n = 3

   m = 4

   array = [[0] * m] * n

   print(array) // [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

   

   array[1][1] = 5

   print(array) // [[0 , 5 , 0], [0 , 5 , 0], [0 , 5 , 0], [0 , 5 , 0]] 

   

   ※  실행 결과를 확인해보면 array[1][1]의 값을 5로 바꾸었을 뿐인데, 3개의 리스트에서 인덱스 1에

      해당하는 원소들의 값이 모두 5로 바뀐 것을 확인할 수 있다. 이는 내부적으로 포함된 4개의 리스트가

      모두 동일한 객체애 대한 3개의 레퍼런스로 인식되기 때문이다.

       따라서 특정한 크기를 가지는 2차원 리스트를 초기화할 때에는 리스트 컴프리헨션을 이용해야 한다.

   

 

   ※ 리스트 관련 기타 메서드 ※

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

ex)

a = [1, 4, 3]

a.append(2) // [1, 4, 3, 2]

 

a.sort() // [1, 2, 3, 4]

 

a.sort(reverse = True) // [4, 3, 2, 1]

 

a.reverse() // [1, 2, 3, 4]

 

a.insert(2, 3) // [1, 2, 3, 3, 4]

 

a.count(3) // 2 (3이 두개 있음)

 

a.remove(1) // [2, 3, 3, 4]

 

이때 remove값은 특정 값을 한개만 없앨 수 있었는데, 다음은 특정한 값의 원소를 모두 제거하는 방법이다.

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

remove_set = {3, 5}

 

# remove_set에 포함되지 않은 값만을 저장

   result = [i for i in a if i not in remove_set]

   print(result) // [1, 2, 4]

 

    

※ 참고자료

   이것이 취업을 위한 코딩 테스트다 with 파이썬_ 나동빈