본문 바로가기
Programming/Python

파이썬 리스트와 리스트 활용하기

by whitele 2021. 8. 5.
반응형

 파이썬도 타 언어들과 같이 배열이 존재합니다. 단순 배열이기보단 상위 레벨 언어답게 다양한 기능을 제공합니다.

 

리스트 기본

리스트의 생성은 직접 리스트 값을 넣거나 꺽쇠로 리스트를 선언 혹은 리스트 생성자로 직접 리스트를 선언할 수 있습니다.

li=[1,2,3,4,5]
li2=[]
li3=list()

 리스트에 요소를 추가할 때는 append() 메서드를 사용합니다.

li.append(1)

반대로 삭제는 remove()를 사용합니다.

 

인덱스

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

list1의 예로 인덱스는 0부터 시작합니다. 때문에 list1[0] : 1입니다. 해당 인덱스는 0~4 범위를 가지게 됩니다.

파이썬에서는 인덱스에서 음수도 다룰 수 있습니다. 끝 요소 list1[4] : 5부터 -1로 시작해 앞으로 역순으로 인덱스를 지정할 수 있습니다.

 배열을 벗어나게 되면 양, 음수 인덱스 모두 인덱스 에러를 발생시키게 됩니다.

 

리스트 슬라이싱

파이썬 배열에서 매우 매력적인 기능 중 하나입니다. 리스트 슬라이싱을 하면 범위 또는 조각 단위로 지정할 수 있게 됩니다.

list[s:]
list[:e]
list[:]
list[s:e]
list[s:e:step]
  • list[start:] : start부터 끝까지 지정
  • list[:end] : 처음부터 end까지 지정
  • list[:] : 전구간
  • list[start:end] : start부터 end 지점까지 지정
  • list[start:end:step] : start부터 step만큼 end까지 지정

예를 들어 인덱스 3~5구간을 지정하고 싶다면 list_x [3:5]로 표현하면 됩니다.

파이썬에서는 특별하게 step이라는 것이 있습니다. step만큼 건너뛰게 하는 것으로 step은 기본값으로 1을 가지고 있습니다.

list_x=[1,2,3,4,5,6,7]
print(list_x[0:6:2]) #1,3,5,7 반환

list_x에서 list_x[0:6:2]를 예를 들면 1,3,5,7을 반환하게 됩니다.

음수 step도 가능합니다. step에 -1을 입력하게 되면 굳이 메서드를 이용하지 않더라도 역순으로 출력시킬 수 있습니다.

 

리스트 복사

리스트는 복사할 때 얕은 복사로 진행이 됩니다. 즉 진짜 메모리상에서 분리되어 다른 항목으로 되는 것이 아닌 사실상 수정 시 같이 바뀌게 되는 복사로 진행이 되게 됩니다. 

list2=list1 같은 경우

list2에 list1을 복사하는 것 같지만 같은 리스트 객체를 참조하고 있어 사실상 이름만 다른 별칭을 추가한 것이나 다름없는 표현입니다.

list2=list1[:] 

이와 같은 경우는 멤버 객체를 하나하나 복사한 것이기 때문에 얕은 복사입니다. 하지만 list1의 요소를 수정하게 되면 list2도 같이 변경되게 됩니다.

 이를 방지하기 위해 메모리 상에서도 분리되게 하는 깊은 복사를 해야 할 때가 있습니다. 깊은 복사를 하기 위해서는 copy를 포함한 후 deepcopy 함수를 사용해야 합니다. 다음 예는 deepcopy의 사용 예입니다.

import copy

list1=[1,2,3,4]
list2=copy.deepcopy(list1)

 

리스트 메서드

 리스트에는 메서드가 포함되어있습니다.

list.append()

단일 항목을 추가하는 메서드

list.insert(i,v)

원하는 위치에 값을 삽입합니다. 원하는 인덱스 위치 i, 값 v를 지정하여 삽입합니다.

list.pop(a)

a인덱스에 위치한 값을 제거합니다. 기본값으로는 마지막 요소를 제거합니다. 비슷하게는 remove()가 있습니다.

list.remove()

값의 첫 인스턴스를 제거합니다.

list.clear()

list의 모든 값을 제거합니다.

list.sort(key=None,reverse=False)

key와 reverse를 지정할 수 있고 key는 정렬 방식 (함수), reverse는 bool값으로 역순 여부를 지정합니다. 기본 값은 key=None, reverse는 False입니다.

list.reverse()

sort의 reverse와는 전혀 다릅니다. 현재 배열 순을 뒤집는 메서드입니다. list[::-1]과 동일합니다.

list.count(v)

요소의 개수를 반환합니다.

list.index(v)

인덱스 값을 반환합니다.

728x90
반응형

댓글