# 시퀀스 데이터 타입은 크게 4가지로 구분할 수 있다.
# 1. 순서 있는 데이터 타입(인덱스, 슬라이싱)
# - 리스트, 튜플, 문자열, 바이트

# 2. 순서없는 데이터 타입(인덱스, 슬라이싱 X)
# - 세트, 딕셔너리

# 3. 변경가능(mutable) 데이터 타입 -> 수정, 추가, 삭제 가능
# - 리스트, 딕셔너리, 세트

# 4. 변경불가능(immutable) 데이터 타입
# - 튜플, 문자열, 바이트

# 리스트 타입
# 객제의 리스트를 저장 / [ ] 또는 list() python 내장함수를 이용
# 순서있는 / 변경 가능한 데이터 타입
my_list = [10, 3.14, True, "abc"]    # list()
print(my_list)
print(type(my_list))
print(my_list[0])    # index 사용가능
print(my_list[0:3:1])  # slicing 사용가능

# 멤버 함수
my_list2 = [10, 20, 30, 40]
# 끝에 값을 더하기
my_list2.append(50)    # 수정 가능하다.
print(my_list2)
# 중간에 값을 더하기
my_list2.insert(1, 200)
print(my_list2)
# 배열을 추가한다
my_list2.extend([1,2,3])
# 연산자로도 가능하다
# my_list2 = my_list2 * 3
print(my_list2)

# 삭제
my_list3 = [10, 20, 30, 40, 50]

# remove : 특정 값을 제거한다.
my_list3.remove(30)
print(my_list3)

# pop : 맨 마지막 요소를 삭제
my_list3.pop()
print(my_list3)
my_list3.pop(2)    # index를 줄 수도 있다.and
print(my_list3)

# del()
del(my_list3[0])
print(my_list3)

my_list4 = [30, 20, 30, 40, 50, 30]
# index() : 특정 값의 index를 구하는 함수, 중복 시 가장 앞에 있는 index의 값 리턴.
print(my_list4.index(30))

# count() : 특정 값이 몇 개냐
print(my_list4.count(30))

# len() : 배열의 전체 요소의 개수
print(len(my_list4))