파이썬에서 리스트는 여러 데이터를 담는 컨테이너형 변수이다. 리스트는 간단히 []를 이용하여 정의 가능하다.
# Defining List list = [1, 2, 5, 10, 3, 0]
■ 리스트의 인덱싱과 슬라이싱
인덱싱(indexing)은 리스트 안의 특정 요소를 선택할 때 사용한다. list[i]로 인덱싱이 가능하고 파이썬에서는 항상 첫 번째 요소가 0부터 시작됨을 기억하자. -를 붙일 경우 뒤에서 i번째 요소를 선택하는데 이때 -1부터 시작하게 된다.
예를 들어 위에서 정의한 list의 0번째 요소를 선택하고 싶다면 list[0]을 입력하면 되고, 가장 마지막 요소를 선택하고 싶다면 list[-1]이고 뒤에서 두 번째 요소를 선택하고 싶다면 list[-2]를 입력하면 된다.
슬라이싱(slicing)은 범위를 지정해주는 것인데 기본적으로 list[start:end:step]으로 구성된다. end의 숫자는 선택 범위에 포함되지 않는데 예를 들어 list 내에서 0번째부터 3번째까지 범위를 선택하고 싶다면 list[0:4] 또는 list[:4]를 입력하면 된다. step은 디폴트값이 1이므로 입력하지 않아도 되고, 시작과 끝 수 역시 입력하지 않아도 된다.
# 리스트의 인덱싱과 슬라이싱 list = [1, 2, 5, 10, 3, 0] print("list = ", list) print("list[2] = {}".format(list[2])) print("list[-1] = {}".format(list[-1])) print("list[-3] = {}".format(list[-3])) print("list[0:2] = {}".format(list[0:2])) print("list[:3] = {}".format(list[:3])) print("list[3:] = {}".format(list[3:])) print("list[0:4:2] = {}".format(list[0:4:2]))
■ For문에서의 리스트
리스트는 기본적으로 순회가 가능하기 때문에 max, min과 같은 함수의 입력으로도 사용할 수 있고 for문에서도 사용 가능하다.
for i in list: print(i)
만약, 아까 위에서 인덱싱을 출력할 때 for문을 사용하고 싶다면 어떻게 할까? 이제 일일이 list[i] 중 숫자 i를 하드코딩할 필요없이 다음과 같이 간단히 출력할 수 있다.
for i in range(0, len(list)): print("list[",i,"] = {}".format(list[i]))
이때 주의할 것은 우리는 리스트 내의 0번째부터 끝 범위에서 하나씩 인덱싱을 하고 싶으므로 범위를 뜻하는 range를 사용해야 한다. len(list)는 list의 길이를 나타내며 이 문제에서는 list가 [1, 2, 5, 10, 3, 0] 총 6개이므로 len(list) 역시 6이다.
■ 리스트 요소의 추가/삭제/위치 반환
리스트는 요소를 변경할 수 있다는 또 다른 특징을 갖고 있다. 또 다른 데이터 구조인 튜플(tuple)과 리스트는 그 쓰임이 거의 유사하지만 바로 이 지점에서 큰 차이점을 보인다.
사용 방법은 간단하므로 코드와 결과값만 살펴보아도 충분히 이해할 수 있을 것이다.
# append list1 = [7, 7, 77, 777] list1.append(0) print(list1) # insert list2 = [7, 7, 77, 777] list2.insert(1, 8) print(list2) # remove list3 = [7, 7, 77, 777] list3.remove(7) print(list3) # pop -- 마지막 요소 삭제 list4 = [7, 7, 77, 777] list4.pop() print(list4) # index list5 = [7, 7, 77, 777] print("7의 위치:{}".format(list5.index(7))) print("77의 위치:{}".format(list5.index(77))) print("8의 위치:{}".format(list5.index(8))) # 8은 없으므로 error (8 is not in list)
마지막으로 list는 +를 통해 합쳐질 수 있다.
안좋은 고객으로 할당된 고객 데이터를 보고 이제 문제점을 찾아 개선하면 된다!
이번에는 클러스터링을 이용하여 지역마다의 마케팅 활동에 대해 인사이트를 얻어보자. 우편번호이기 때문에 따로 전처리를 할 필요는 없다. 다만, 전처리된 데이터 세트와 원 데이터의 세트의 레코드가 동일한 순서이기 때문에 clusterer로는 전처리된 데이터에서 생성된 것을 그대로 사용해도 된다.
list1 = [1, 1, 1] list2 = [2, 2, 2] print(list1 + list2)