# TODO: 리스트 만드는 방법 두가지 시험에 나옴
c = list()
d = []
intL = [4, 1, 8, 6]
mixed = [1, 2.2, "Mickey", "민수", [8, 4, "Python"]]
NintL = len(intL)
print(NintL, len(mixed))
print(intL[0], mixed[1], mixed[4])
print(mixed[4][0], mixed[4][1])
print(mixed[4][2], mixed[4][2][0])
# TODO: List slicing 답 적을 때, 꼭 리스트라는거 표현해야함 즉 답이 0,2,4 라면 [0,2,4] 이렇게 대괄호 적어줘야해
# TODO: List slicing 답 적을 때, 꼭 리스트라는거 표현해야함 즉 원소가 없어도 빈 리스트 [] 로 표현해야함
a = [0, 1, 2, 3, 4, 5, 6, 7, 8]
print(a[4:4]) # 중요
print(a[4:1:1]) # 중요. 답 에러 아님 빈 리스트임.
print(a[4:5])
print(a[4]) # 리스트가 아닌 원소가 나옴. 습관적으로 답이 모두 리스트일거란 생각하면 안돼
print(a[::-1]) # step 이 음수니까, 뒤집어 진다는거 잘 알아라.
print(a[5::-2]) # 중요
print(a[1:4:-1]) # 중요. 에러 아님. 빈 리스트
print(a[16:12:-2]) # 중요. 에러 아님. 범위밖이다. 빈 리스트.
# TODO: slicing 을 이용한 리스트 원소 제거/교체/추가 p8 ~ p11 시험에 100% 나온다.
a[1:3] = []
a[1:3] = [1]
a[1] = ['a', 'b'] # a[1] 의 값을 list ['a', 'b'] 로 수정. 결과 : [0, ['a', 'b'], 2, 3, 4]
a[1:2] = ['a', 'b', 'c'] # a[1] 값 1 대신 'a', 'b', 'c' 으로 대체. 결과 : [0, ’a’, ’b’, ’c’, 2, 3, 4]
# 복사1
A = ['ab', 'cd', 'ef']
B = A
print(id(A), id(B))
B[1] = 10
print(A, B)
# 복사2
A = ['ab', 'cd', 'ef']
B = A[:] # 슬라이싱 자체가 새로운 리스트를 만드는거다. 내부적으로(B = A.copy()) 근데 그래도 이 방식으로 복사 사용하면 안돼. 수정할때 문제가 생길수 있어. p14(원소가 리스트인 경우)
print(id(A), id(B))
B[2] = 10
print(A, B)
L = [1, 2, 3, 4]
L.append(5)
print(L)
L.insert(2, 10) # 2 index 에 10 추가
print(L)
print(L.pop()) # 마지막 원소 제거 및 그값 반환
print(L)
print(L.pop(2)) # 2 index 제거 및 그값 반환
print(L)
L.remove(3)
A = ['red', 'blue', 'yellow']
del A[:]
print(A)
del A
# print(A)
# TODO: x.sort() 중요
x = [1, 2, 3, 4]
x.sort(reverse=True) # 내림차순 정렬. 반환값이 없어.
print(x)
L = [1, 5, 3]
M = [19, 2]
r1 = L + M # 이거는 새로운 리스트를 리턴함 extend 와 차이가 있다.
print(r1)
L.extend(M)
print(L)
print(sorted(x, reverse=True)) # x는 그대로 있고 정렬된 리스트를 새롭게 반환하는것임
e = list(enumerate(x)) # 인덱스까지 데이터로 활용. 튜플 생성됌
print(e)
problem1
# 인덱싱을 사용하여 리스트 L 의 원소 리스트의 원소들을 제곱하여 그 합을 구하라
# 제곱의 합들은 새로운 리스트에 저장하여 출력
# 새로운 리스트에 저장할 때는 슬라이싱을 사용해라
L = [[1, 2, 3], [4, 5], [6], [7, 8]]
M = []
M[0:0] = [pow(L[0][0], 2) + pow(L[0][1], 2) + pow(L[0][2], 2)]
M[1:1] = [pow(L[1][0], 2) + pow(L[1][1], 2)]
M[2:2] = [pow(L[2][0], 2)]
M[3:3] = [pow(L[3][0], 2) + pow(L[3][1], 2)]
print(M)
problem2
# 리스트 method 중 append 를 사용하여 아래의 조건을 만족
# L = [1,2,3,4,5] 에 새로 추가할 원소를 입력 받을 것
# 추가할 원소의 데이터형은 정수로 제한
L = [1, 2, 3, 4, 5]
try:
data = int(input("리스트 L에 추가할 data를 입력 : "))
L.append(int(data))
print(L)
except:
""
# 두 리스트를 합쳐서 출력해라
A = [1, 2, 3]
B = [5, 6]
# 첫번째 출력은 + 를 사용하고
print("+를 사용: {}".format(A + B))
# 두번째 출력은 extend() 리스트 메서드를 사용해라
A.extend(B)
print("extend()를 사용: {}".format(A))
problem1
problem2
problem3
problem4