내일배움캠프/TIL(Today I Learned)

[2026/03/17] 내일배움캠프 7일차 TIL

sj68 2026. 3. 17. 20:47

오늘 한일

1. 데이터 분석 파이썬 종합반 1,2 주차 수강

2. 튜터님의 파이썬 기초 쑥쑥 세션 수강

 

온보딩 주차의 발표가 끝나고, 프로그래밍 기초, 데이터 분석 입문 주차가 시작되었다. 새로운 팀원들을 만나고 조장을 맡게 되었는데 팀원들 모두 MBTI가 XXFP의 MBTI를 가지고 있어서 쉽게 친해질 수 있었다.

 

1. 데이터 분석 파이썬 종합반 강의 수강

오늘은 강의인 데이터 분석 파이썬 종합반을 수강하면서 파이썬에 대한 지식을 보충했는데, 오늘 새롭게 알게 된 내용들에 대해 정리해보겠다.

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 1. 음수 인덱스 사용하기 (뒤에서부터 추출)
print(my_list[-3:])   # 출력: [8, 9, 10]

# 2. 간격 설정하기 (특정 간격으로 추출)
print(my_list[1:9:2]) # 출력: [2, 4, 6, 8]

# 3. 리스트 전체를 복사하기
copy_of_list = my_list[:]
print(copy_of_list)   # 출력: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 4. 리스트를 거꾸로 뒤집기
reversed_list = my_list[::-1]
print(reversed_list)  # 출력: [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

우선 리스트에 대해서 추가적으로 알게된 내용들이다

 

우선 리스트 슬라이싱의 경우 [a:b]로 범위를 정할수 있는데 b의 경우 실제위치의 -1까지 범위가 결정된다는 점을 주의해야한다는 사실을 확인할 수 있었다.

 

또한 음수 인덱스를 통해 뒤에서 부터 데이터를 추출하고, : 를 추가적으로 붙여서 특정 간격으로 추출할 수 있음을 확인할 수 있었다.

# 숫자로 이루어진 리스트 정렬 예시
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5]
numbers.sort()
print("정렬된 리스트:", numbers)  # 출력: [1, 1, 2, 3, 4, 5, 5, 6, 9]

# 문자열로 이루어진 리스트 정렬 예시
words = ['apple', 'banana', 'orange', 'grape', 'cherry']
words.sort()
print("정렬된 리스트:", words)  # 출력: ['apple', 'banana', 'cherry', 'grape', 'orange']

# 내림차순으로 리스트 정렬 예시
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5]
numbers.sort(reverse=True)
print("내림차순으로 정렬된 리스트:", numbers)  # 출력: [9, 6, 5, 5, 4, 3, 2, 1, 1]

# 리스트의 문자열 길이로 정렬 예시
words = ['apple', 'banana', 'orange', 'grape', 'cherry']
words.sort(key=len)
print("문자열 길이로 정렬된 리스트:", words)  # 출력: ['apple', 'grape', 'banana', 'cherry', 'orange']

sort의 경우 reverse=True와 reverse=False로 오름차순, 내림차순을 결정할 수 있는 것은 알고 있었지만, key=len을 이용하여 문자열 길이로 정렬할 수 있다는 사실을 새롭게 배웠다.

 

# 튜플을 리스트로 변경하기
my_tuple = (1, 2, 3, 4, 5)
my_list = list(my_tuple)
print(my_list)  # 출력: [1, 2, 3, 4, 5]

# 리스트를 튜플로 변경하기
my_list = [1, 2, 3, 4, 5]
my_tuple = tuple(my_list)
print(my_tuple)  # 출력: (1, 2, 3, 4, 5)

또한 어제, 튜플은 리스트와 달리 고정된 데이터라고 배웠는데 서로 변경할 수 있음을 알 수 있었는데. 튜플을 통해 안정적인 데이터를 만들어두고 다른 변수에 리스트화하여 대입해서 사용하면 좋을 것 같다는 생각이 들었다.

 

# 딕셔너리 생성
my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}

# keys() 메서드 예제
keys = my_dict.keys()
print("Keys:", keys)  # 출력: dict_keys(['name', 'age', 'city'])

# values() 메서드 예제
values = my_dict.values()
print("Values:", values)  # 출력: dict_values(['John', 30, 'New York'])

# items() 메서드 예제
items = my_dict.items()
print("Items:", items)  # 출력: dict_items([('name', 'John'), ('age', 30), ('city', 'New York')])

# get() 메서드 예제
age = my_dict.get('age')
print("Age:", age)  # 출력: 30

# pop() 메서드 예제
city = my_dict.pop('city')
print("City:", city)  # 출력: New York
print("Dictionary after pop:", my_dict)  # 출력: {'name': 'John', 'age': 30}

# popitem() 메서드 예제
last_item = my_dict.popitem()
print("Last item popped:", last_item)  # 출력: ('age', 30)
print("Dictionary after popitem:", my_dict)  # 출력: {'name': 'John'}

마지막으로 딕셔너리와 관련된 내용에서, key/value 값을 동시에 혹은 각각 뽑아낼 수 있는 메서드 4종류를 확실히 알게 되었고. pop과 popitem으로 딕셔너리의 key와 value를 제거하면서 동시에 변수에 값을 대입하는 메서드를 알게되었다.

 

2. 튜터님의 파이썬 기초 쑥쑥 세션 수강

전반적인 파이썬 문법 관련 내용을 복습할 수 있었고 파이썬의 특징에 대해서 알려주셨다.

 

파이썬의 경우 '매우 쉽고 접근성이 좋은 언어'로 가장 많은 사람들이 사용하는 프로그래밍 언어인데, C언어와 다르게 무겁고 느려서 게임이나 웹 사이트 개발같이 빠른 속도를 요구하는 분야에서는 사용하기 힘들다고한다.

 

tests= [1,2,3,4,5]

tests.extend(['apple', 'banana', 1, 2]) # 한 요소 추가시 append, 여러 요소 추가시 extend

tests.append('apple')
tests.append("banana")
tests.append(1)
tests.append(2)

set(tests) # 결과?

추가적으로 퀴즈를 내주셨는데,

tests.extend를 통해 [1,2,3,4,5,'apple', 'banana',1, 2]가 될것이고

네 줄의 tests.append를 통해 [1,2,3,4,5,'apple','banana',1,2,'apple','banana',1,2]가 될것이다.

이후 set는 집합의 성질에 의해 모든 중복된 항들이 사라져서 [1,2,3,4,5,apple,banana]가 될것이라고 예상했다

실제 코드 작성 결과 예상과 다르게 apple과 banana의 순서가 바뀌어 출력되었는데

Python의 set(집합) 자료형은 순서가 없는(unordered) 자료형이기 때문입니다.

리스트(list)와 달리 세트는 데이터가 입력된 순서를 기억하지 않으며, 내부적으로 해시(hash) 값을 사용하여 데이터를 저장합니다. 따라서 set(tests)를 통해 리스트를 세트로 변환하고 출력할 때, 요소들이 어떤 순서로 출력될지는 보장되지 않으며 내부적인 해시 테이블의 배치에 따라 임의의 순서로 보이게 됩니다 (특히 문자열의 경우 보안을 위해 실행할 때마다 해시 값이 달라지는 해시 무작위화가 적용됩니다).

요약하자면, set은 중복을 제거하는 역할은 하지만 순서를 유지하지 않으므로 'apple'과 'banana'의 출력 순서가 바뀌거나 무작위로 나타나는 것은 정상적인 동작입니다. 만약 중복을 제거하면서 원래 리스트의 순서를 유지하고 싶다면 list(dict.fromkeys(tests))와 같은 방법을 사용할 수 있습니다.

AI에게 물어본 결과, set는 중복을 제거하는 역할을 할 뿐 순서는 유지하지 않아서라는 사실을 알 수 있었다. 즉, 해시 테이블 구조에 따라 배치되는데 'banana'의 해시 위치가 더 앞쪽 버킷에 들어간 것뿐인 것이다.