# 리스트의 유형
a = [ ]
b = [1, 2, 3]
c = ['Life', 'is', 'too', 'short']
d = [1, 2, 'Life', 'is']
e = [1, 2, ['Life', 'is']]

# 리스트의 인덱싱
a = [1, 2, 3]
print(a) #변수 a 출력
print(a[0]) #변수 a의 첫번째 요소값을 출력
print(a[2]) #변수 a의 세번째 요소값을 출력

print(a[0]+a[2]) #첫번째와 세번째 요소값을 더해서 출력

a = [1, 2, 3, ['a', 'b', 'c']]
print(a[3])
print(a[-1]) #뒤에서 첫번째 요소값을 출력
print(a[-1][1]) #뒤에서 첫번째 요소값을 가진 리스트내의 두번째 요소값을 출력

a = [1, 2, ['a', 'b', ['Life', 'is']]]
print(a[-1][-1][0]) #삼중 리스트에서 'Life' 문자 출력


# 리스트의 슬라이싱
a = [1, 2, 3, 4, 5]
print(a[0:2]) #[1, 2, 3]이 출력되지 않는 이유는 a[0:2]를 수식으로 나타내면 [ 0 <= a < 2 ]이라는 뜻이기 때문이다.

b = a[:2] #시작 번호를 생략하면 리스트의 처음부터 (입력한) 끝 번호까지 출력한다.
c = a[2:] #끝 번호를 생략하면 (입력한)시작 번호부터 그 리스트의 끝까지 출력한다.
print(b)
print(c)

a = [1, 2, 3, ['a', 'b', 'c'], 4, 5]
print(a[2:5])
print(a[3][:2]) #중첩 리스트에서 ['a', 'b'] 요소를 출력


# 리스트 연산자
a = [1, 2, 3]
b = [4, 5, 6]
print(a+b) #리스트 더하기

a = [1, 2, 3]
print(a*3) #리스트 반복(*)하기

a = [1, 2, 3]
# print(a[2] + "hi")   이렇게 출력하면 형 오류(TypeError)가 발생한다. 왜냐하면 정수(3)와 문자열인(hi)은 더할 수 없기 때문이다.
print(str(a[2]) + "hi") #내장 함수인 str()을 사용하면 정수나 실수를 문자열의 형태로 바꿔주기 때문에 문자열(3) + 문자열(hi)형태가 되어 TypeError가 발생하지 않는다.


# 리스트의 수정, 변경, 삭제
a = [1, 2, 3]
a[2] = 4 #하나의 값을 수정
print(a)

a = [1, 2, 3]
a[1:2] = ['a', 'b', 'c'] #a[1]에서 a[2] 사이의 리스트를 ['a','b','c']로 변경
print(a)

a = [1, 2, 3]
a[2] = ['a', 'b', 'c'] #a의 두번째 요소를 ['a','b','c']로 변경. 위에 있는 예제와 비교해 볼 것
print(a)

a = [1, 2, 3, 4, 5]
a[1:4] = [] #[]를 사용해서 리스트 요소를 삭제
print(a)

a = [1, 2, 3, 4, 5]
del a[1:4] #del 함수를 사용해 리스트 요소를 삭제
print(a)


# 리스트 관련 함수들
a=[1,2,3]
a.append(4) #리스트의 마지막에 x값을 추가
print(a)

a.append([5, 6]) #리스트의 마지막에 x값을 추가
print(a)

a=[1, 4, 3, 2]
a.sort() #리스트의 요소(숫자) 순차 정렬
print(a)

a=['a','c','b'] #리스트의 요소(문자) 순차 정렬
a.sort()
print(a)

a=['a','c','b']
a.reverse() #리스트의 요소를 역순으로 뒤집어 준다. 단, 요소를 정렬하지는 않음.
print(a)

a=[1,2,3]
print(a.index(2)) #리스트에 x값이 있으면 x의 위치값을 출력한다.
print(a.index(3))

a=[1,2,3]
a.insert(0,4) #insert(x,y)는 리스트의 x번째 위치에 y를 삽입하는 함수
print(a)

a=[1,2,3,1,2,3]
a.remove(3)
print(a) #첫 번째로 나오는 x요소를 삭제하는 함수. 3이 두개 나오지만 첫 번째 요소만 삭제처리 한다.

a=[1,2,3]
a.pop()
print(a) #리스트의 마지막 요소를 꺼내고 남은 요소만 출력한다.

a=[1,2,3]
a.pop(1)
print(a) #리스트의 x번째 요소를 꺼내고 남은 요소만 출력한다.

a=[1,2,3,1]
print(a.count(1)) #리스트내에 x요소가 몇 개 있는지 확인해서 출력한다.

a=[1,2,3]
a.extend([4,5]) #extend(x)는 x자리에 리스트만 올 수 있으며 a리스트에 x리스트를 더해준다.
print(a)
b=[6,7]
a.extend(b) #x자리에 b리스트를 더해준다.
print(a)
