<파이썬 어려웠던 개념 정리 : list ~ Dictionary(29~42)>
list 만들기 방법은
a = list()
a= [~~~]
가 있다.
리스트는 여러 클래스를 넣을 수 있으며 순서가 있다.
TypeError: make_list() takes 0 positional arguments but 2 were given
함수가 주어졌고 이미 테스트 케이스에서 2개의 인자를 받자고 나왔는데 본 함수가 0개의 인자를 받은 상황이다. 그래서 2개의 인자를 받아야 한다. 코드 작성 칸이 문제 파트였지만 실제로 리스트를 만들었을 때 실행되지 않는 에러는 함수 자체에 있어서 수정했다. 이후 하드 코딩, 즉 그 결과 값만 나오는 것이 아니라 원하는 것이 실제 아무거나 넣어도 되는 코딩이므로 이와 같이 수정해준다.
def make_list(a, b): # 수정 부분
my_list = [a, b] # 문제 부분
return my_list
이후 프린트 해주면 2줄이 나오는데 이유는
test.py에서 테스트 케이스가 한 줄 먼저 출력된다.
main.py에서 print한 내용이 한 줄 더 출력된다.
이는 파이썬의 특징적인 부분이라고 한다.
lass UnitTests(unittest.TestCase):
def test_return_nested_lists(self):
self.assertEqual(multi_list(), [['becoming', 29],['developers', 30]])
테스트 케이스 자체에 인자가 없다.
def access_list():
# 아래의 코드는 변경하지 마세요.
my_list = [[1,2,3], [4,5,6], [7,8,9], [[10,11,12], 13, 14]];
# 아래의 코드만 변경해 주세요.
my_data = my_list[2][1]; # 8
def add_first_and_last_elements(my_list):
# 이 함수를 구현해주세요
if len(my_list) > 1:
return my_list[0] + my_list[-1] #마지막 요소
elif len(my_list) == 1:
return my_list[0]
else:
return 0
my_list = [0]
print(add_first_and_last_elements(my_list))
그 다음으로 생각한 것 : 0을 뒤로 옮긴 뒤 -2가 된 요소를 앞으로 옮긴다.
def merge_and_swap(list1, list2):
merge_list = list1+list2
merge_list.insert(-1, merge_list[0])
del merge_list[0]
merge_list.insert(0, merge_list[-2])
del merge_list[-2]
return merge_list
# 이 함수를 구현해 주세요
merge_and_swap([1,2,3], [5])
분명 요소는 바뀌었지만(1 2 3 4 5 6 7 -> 7 2 3 4 5 6 1) 테스트 코드에서 막혔다. 실패.
마지막 시도 : 파이썬 리스트 간단히 스왑 하기. 간단하게 인덱스 값으로 머지된 리스트를 바꾼다.
즉 a, b = b, a
def merge_and_swap(list1, list2):
merge = list1+list2
if merge == []: #빈 리스트 그대로 리턴
return []
merge[0], merge[-1] = merge[-1], merge[0]
return merge
# 이 함수를 구현해 주세요
merge_and_swap([1,2,3], [5])
리스트 슬라이싱 : 리스트의 일부를 복사하는 것(즉 새로운 것을 만드는 것).
일부분에서도 그 건너뛰는 값을 만들 수 있다.
리스트 remove, del
def remove_odd_numbers(numbers):
## 이 함수를 구현해주세요
if numbers[4] % 2 == 1:
numbers.remove(numbers[4])
if numbers[3] % 2 == 1:
numbers.remove(numbers[3])
if numbers[2] % 2 == 1:
numbers.remove(numbers[2])
if numbers[1] % 2 == 1:
numbers.remove(numbers[1])
if numbers[0] % 2 == 1:
numbers.remove(numbers[0])
return numbers
언제 쓰는가? : Tuple은 일반적으로 2개에서 5개 사이의 요소들을 저장할때 사용되며, 특정 데이터를 ad hoc(즉석적으로) 하게 표현하고 싶을때 사용. 튜플은 간단한 데이터를 사용할 때 가볍게 쓸 수 있다고 함.
def convert_list_to_list_of_tuples(my_list):
## 이 함수를 구현해 주세요
new_list = [tuple(my_list[0:2]), tuple(my_list[2:4]),tuple(my_list[4:6])]
return new_list
set1 = {1, 2, 3}
set2 = set([1, 2, 3])
<checkpoint : Dictionary 공부하기>
1. 딕셔너리 요소 수정하기
my_dict = { "one": 1, 2: "two", 3 : "three" }
my_dict["four"] = 4 # list와 유사
print(my_dict)
> {'one': 1, 2: 'two', 3: 'three', 'four': 4}
지민 = {"가명" : "지민", "본명" : "박지민", "생년월일" : "1995년 10월 13일", "출생지" : "부산", "포지션" : "리드 보컬, 메인 댄서", "학력" : "한양사이버대학교 재학"}
Dict는 요소의 인덱스라는 것이 존재하지만 set은 인덱스, 즉 순서가 존재하지 않는다. 또한 dict는 키/값 쌍으로 이뤄져 있지만 set은 값만 있다.