일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 코딩테스트준비
- redis
- 방송대
- presignedurl
- 유노코딩
- CSS
- node.js
- 엘리스sw트랙
- nestjs
- SQL
- 방송대컴퓨터과학과
- 코딩테스트
- 코드잇
- 개발자취업
- HTML
- Git
- aws
- 꿀단집
- JavaScript
- MySQL
- 프로그래머스
- Python
- 항해99
- 99클럽
- TiL
- 파이썬
- 데이터베이스시스템
- 파이썬프로그래밍기초
- 중간이들
- Cookie
- Today
- Total
배꼽파지 않도록 잘 개발해요
[코드잇] 파이썬 프로그래밍 기초 - 프로그래밍과 데이터 in Python 본문
1. 리스트
리스트
# 리스트 (list)
numbers = [2, 3, 5, 7, 11, 13] # 정수형 리스트
names = ["윤수", "혜린", "태호", "영훈"]
# 3은 numbers 리스트의 요소
# 태호는 names 리스트의 요소
print(numbers)
# [2, 3, 5, 7, 11, 13]
print(names)
# ['윤수', '혜린', '태호', '영훈']
"""
인덱스(index) : 리스트에서 요소의 위치
인덱싱(indexing) : 인덱스를 통해 요소를 받아오는 것
"""
"""
◆ 인덱싱
"""
# 인덱스 번호 직접 지정
print(numbers[1] + numbers[3])
# 3 + 7 = 10
# 변수에 인덱스 값을 저장
num_1 = numbers[1]
num_3 = numbers[3]
print(num_1 + num_3)
# 3 + 7 = 10
# 리스트에 없는 인덱스를 불러옴
"""
print(numbers[6])
→ 오류 (인덱스 범위를 벗어남)
"""
print(numbers[0]) # 2 (첫번째 요소)
print(numbers[-1]) # 13 (마지막 요소)
print(numbers[-2]) # 11
# print(numbers[-7]) # 오류
# 리스트 (list)
numbers = [2, 3, 5, 7, 11, 13]
names = ["윤수", "혜린", "태호", "영훈"]
"""
◆ 리스트 슬라이싱 (list slicing)
"""
numbers[0:4] # 인덱스 0부터 3까지 자름
print(numbers[0:4]) # [2, 3, 5, 7]
# *** 주의 : 0:4는 인덱스 3까지임!
numbers[2:] # 뒷부분 비어있으면 마지막까지
print(numbers[2:]) # [5, 7, 11, 13]
numbers[:3] # 앞부분 비어있으면 처음부터
print(numbers[:3]) # [2, 3, 5]
new_list = numbers[:3] # [2, 3, 5]
print(new_list[2]) # 5
# 리스트 요소 바꾸기
numbers[0] = 7
print(numbers) # [7, 3, 5, 7, 11, 13]
numbers[0] = numbers[0] + numbers[1] # numbers[0] = 7 + 3
print(numbers) # [10, 3, 5, 7, 11, 13]
리스트 함수
numbers = []
# len : 리스트 길이
print(len(numbers)) # 0
# append : 리스트에 값 추가 (오른쪽 끝부터 추가)
numbers.append(5)
numbers.append(8)
print(numbers) # [5, 8]
print(len(numbers)) # 2
numbers = [2, 3, 5, 7, 11, 13, 17, 19]
# del : 리스트 요소 삭제
del numbers[3] # 인덱스 3번 요소 (7) 삭제
print(numbers) # [2, 3, 5, 11, 13, 17, 19]
# insert : 원하는 위치에 값 삽입
numbers.insert(4, 37)
print(numbers) # [2, 3, 5, 11, 37, 13, 17, 19]
"""
append : 추가연산
insert : 삽입연산
"""
리스트 정렬
sorted : 기존 리스트는 건들이지 않고, 정렬된 새로운 리스트를 리턴
sort : 아무것도 리턴하지 않고, 기존 리스트를 정렬
numbers = [19, 13, 2, 5, 3, 11, 7, 17]
"""
sorted
"""
# 오름차순
new_list = sorted(numbers)
print(new_list)
# [2, 3, 5, 7, 11, 13, 17, 19]
# 내림차순
reversed_list = sorted(numbers, reverse=True)
print(reversed_list)
# [19, 17, 13, 11, 7, 5, 3, 2]
print(numbers)
# [19, 13, 2, 5, 3, 11, 7, 17]
# 원래의 리스트를 그대로 출력함
"""
sort
"""
print(numbers.sort())
# None
"""
sort는 아무것도 리턴하지 않음
numbers 리스트 자체를 정렬함
정렬된 리스트를 보고 싶으면
numbers.sort()를 print할 게 아니라
numbers.sort()를 하고 numberes를 print 해야 함.
"""
numbers.sort(reverse=True)
print(numbers)
# [19, 17, 13, 11, 7, 5, 3, 2]
리스트 인덱싱 연습
greetings = ["안녕", "니하오", "곤니찌와", "올라", "싸와디캅", "헬로", "봉주르"]
i = 0
while i < len(greetings): # len(greetings)는 원소의 개수라서 7임
print(greetings[i])
i += 1
온도 단위 바꾸기
# 화씨 온도에서 섭씨 온도로 바꿔 주는 함수
def fahrenheit_to_celsius(fahrenheit):
celsius = (fahrenheit - 32) * 5 / 9
return round(celsius, 1)
temperature_list = [40, 15, 32, 64, -4, 11]
print("화씨 온도 리스트: {}".format(temperature_list)) # 화씨 온도 출력
# 리스트의 값들을 화씨에서 섭씨로 변환하는 코드
i = 0
while i < len(temperature_list):
temperature_list[i] = fahrenheit_to_celsius(temperature_list[i])
i += 1
print("섭씨 온도 리스트: {}".format(temperature_list))
"""
모범답안
"""
# 화씨 온도에서 섭씨 온도로 바꿔 주는 함수
def fahrenheit_to_celsius(fahrenheit):
return (fahrenheit - 32) * 5 / 9
temperature_list = [40, 15, 32, 64, -4, 11]
print("화씨 온도 리스트: {}".format(temperature_list)) # 화씨 온도 출력
# 리스트의 값들을 화씨에서 섭씨로 변환하는 코드
i = 0
while i < len(temperature_list):
temperature_list[i] = round(fahrenheit_to_celsius(temperature_list[i]), 1)
i += 1
print("섭씨 온도 리스트: {}".format(temperature_list)) # 섭씨 온도 출력
리스트의 원소를 넣어줄 때 round함수를 적용하여 코드의 길이가 짧아짐.
리스트 함수 활용하기
# 빈 리스트 만들기
numbers = []
print(numbers)
# numbers에 값들 추가
numbers.append(1)
numbers.append(7)
numbers.append(3)
numbers.append(6)
numbers.append(5)
numbers.append(2)
numbers.append(13)
numbers.append(14)
print(numbers)
# numbers에서 홀수 제거
numbers = [num for num in numbers if num % 2 == 0]
print(numbers)
i = 0
while i < len(numbers):
if numbers[i] % 2 == 1: # 홀수일 경우 해당 요소 삭제
del numbers[i]
else: # 짝수일 경우 인덱스 번호 하나 늘려준다
i += 1
print(numbers)
# numbers의 인덱스 0 자리에 20이라는 값 삽입
numbers.insert(0, 20)
print(numbers)
# numbers를 정렬해서 출력
numbers = sorted(numbers)
print(numbers)
numbers.sort()
print(numbers)
리스트 꿀팁
리스트에서 값의 존재 확인하기
primes = [2, 3, 5, 7, 11, 13, 17, 19, 23]
print(7 in primes) # False
print(12 in primes) # True
primes = [2, 3, 5, 7, 11, 13, 17, 19, 23]
print(6 not in primes) # True
print(13 not in primes) # False
리스트 안의 리스트 (Nested List)
# 세 번의 시험을 보는 수업
grades = [[62, 75, 77], [78, 81, 86], [85, 91, 89]]
# 첫 번째 학생의 성적
print(grades[0]) # [62, 75, 77]
# 세 번째 학생의 성적
print(grades[2]) # [85, 91, 89]
# 첫 번째 학생의 첫 번째 시험 성적
print(grades[0][0]) # 62
# 두 번째 학생의 세 번째 시험 성적
print(grades[1][2]) # 86
# 첫 번째 시험의 평균
print((grades[0][0] + grades[1][0] + grades[2][0]) / 3) # 75.0
sort 메소드
.sort()는 새로운 리스트를 생성하지 않고 해당 리스트를 정렬된 상태로 바꿔줌.
# 오름차순 정렬
numbers = [5, 3, 7, 1]
numbers.sort()
print(numbers)
# [1, 3, 5, 7]
reverse 메소드
리스트 원소들을 뒤집어진 순서로 출력함.
# 원소들을 거꾸로 뒤집음
list = [2, 5, 3, 1, 11]
list.reverse()
print(list)
# [11, 1, 3, 5, 2]
index 메소드
해당 원소의 인덱스 값을 반환함.
food = ["pizza", "hamburger", "chicken", "noodle"]
print(food.index("pizza")) # 0
print(food.index("noodle")) # 3
remove 메소드
첫번째로 해당 값을 가지고 있는 원소를 삭제함. (중복인 경우 첫번째로 있는 것만 삭제)
fruits = ["딸기", "당근", "파인애플", "수박", "참외", "파인애플", "메론"]
fruits.remove("파인애플")
print(fruits)
# ['딸기', '당근', '수박', '참외', '파인애플', '메론']
2. for 반복문
for 반복문
while과 for 반복문으로 할 수 있는게 거의 똑같음
상황에 따라 for문을 쓰는 게 while문을 쓰는 것보다 코드가 더 깔끔할 수 있음.
# for문
my_list = [2, 3, 5, 7, 11]
for number in my_list:
print(number)
# while문
my_list = [2, 3, 5, 7, 11]
i = 0
while i < len(my_list):
print(my_list[i])
i += 1
range 함수
# range 함수
range() ---> 파라미터 1개 버전
range( , ) ---> 파라미터 2개 버전
range( , , ) ---> 파라미터 3개 버전
----------------------------------------
◆ 파라미터 2개 버전
for i in range(start, stop):
print(i)
→ start 부터 stop-1까지의 범위
ex.
for i in range(3, 11):
print(i)
for i in [3, 4, 5, 6, 7, 8, 9, 10]:
print(i)
------------------------------------------
◆ 파라미터 1개 버전
for i in range(stop):
print(i)
→ 0부터 stop-1까지의 범위
ex.
for i in range(10):
print(i)
for i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:
print(i)
------------------------------------------
◆ 파라미터 3개 버전
for i in range(start, stop, step):
print(i)
→ start부터 stop-1까지의 범위, 간격 step
ex.
for i in range(3, 17, 3):
print(i)
→ 정수 3부터 16까지 3씩
for i in [3, 6, 9, 12, 15]:
print(i)
for i in range(3, 16, 3):
print(i)
for i in [3, 6, 9, 12, 15]:
print(i)
for i in range(3, 15, 3):
print(i)
for i in [3, 6, 9, 12]:
print(i)
-----------------------------
◆ range 함수 장점
- 간편하고 깔끔함
- 컴퓨터 메모리를 효율적으로 사용함.
피타고라스 삼조
for a in range(1, 400):
for b in range(1, 400):
c = 400 - a - b
if a ** 2 + b ** 2 == c ** 2 and a < b < c:
print(a * b * c)
리스트 뒤집기
numbers = [2, 3, 5, 7, 11, 13, 17, 19]
# 리스트 뒤집기
# 여기에 코드를 작성하세요
print("뒤집어진 리스트: " + str(numbers))
뒤집어진 리스트: [19, 17, 13, 11, 7, 5, 3, 2]
numbers = [2, 3, 5, 7, 11, 13, 17, 19]
# 리스트 뒤집기
# numbers.reverse()
for num in range(0, int(len(numbers)/2)): # 반만 나눔 → 리스트 길이의 절반을 정수값으로 함
temp = numbers[num] # temp라는 임시 교환변수 만들어서 넣어주기
numbers[num] = numbers[len(numbers)-1-num] # 대칭되는 원소들 바꾸고, 가운데 건 내버려둠
numbers[len(numbers)-1-num] = temp
print("뒤집어진 리스트: " + str(numbers))
# 주의점 : 대칭되는 원소 교환은 한번만
# (리스트 길이의 절반만 해야됨. 안 그럼 원상복귀)
numbers = [2, 3, 5, 7, 11, 13, 17, 19]
# 리스트 뒤집기
for left in range(len(numbers) // 2): # 나누기하고 나온 몫 (정수값)
# 인덱스 left와 대칭인 인덱스 right 계산
right = len(numbers) - left - 1
# 위치 바꾸기
temp = numbers[left]
numbers[left] = numbers[right]
numbers[right] = temp
print("뒤집어진 리스트: " + str(numbers))
뒤집을 원소를 left, right로 구분
인덱스 구하는 것과 위치 바꾸는 것의 단계를 나누어 놓았음.
3. 사전
사전
# 사전 (dictionary)
# key-value pair (키-값 쌍)
my_dictionary = {
5: 25,
2: 4,
3: 9
}
print(type(my_dictionary)) # <class 'dict'>
# 딕셔너리 값 받아오기
print(my_dictionary[3]) # 9
# 딕셔너리 값 추가
my_dictionary[9] = 81
print(my_dictionary) # {5: 25, 2: 4, 3: 9, 9: 81}
# 리스트 인덱스 : 정수형임
# 사전 키 : 정수형일 필요가 없음
my_family = {
'엄마' : '김자옥',
'아빠' : '이석진',
'아들' : '이동민',
'딸' : '이지영'
}
print(my_family['아빠']) # 이석진
사전 활용법
my_family = {
'엄마' : '김자옥',
'아빠' : '이석진',
'아들' : '이동민',
'딸' : '이지영'
}
print(my_family.values())
# dict_values(['김자옥', '이석진', '이동민', '이지영'])
print('이지영' in my_family.values())
# True
print('성태호' in my_family.values())
# False
# for문으로 값 하나씩 출력
for value in my_family.values():
print(value)
"""
김자옥
이석진
이동민
이지영
"""
print(my_family.keys())
# dict_keys(['엄마', '아빠', '아들', '딸'])
# for문으로 키 목록 출력
for key in my_family.keys():
print(key)
"""
엄마
아빠
아들
딸
"""
# key와 value를 모두 출력
for key in my_family.keys():
value = my_family[key]
print(key, value)
"""
엄마 김자옥
아빠 이석진
아들 이동민
딸 이지영
"""
# key와 value를 모두 출력 (한 줄)
for key, value in my_family.items():
print(key, value)
"""
엄마 김자옥
아빠 이석진
아들 이동민
딸 이지영
"""
투표 집계하기
# 투표 결과 리스트
votes = ['김영자', '강승기', '최만수', '김영자', '강승기', '강승기', '최만수', '김영자', \
'최만수', '김영자', '최만수', '김영자', '김영자', '최만수', '최만수', '최만수', '강승기', \
'강승기', '김영자', '김영자', '최만수', '김영자', '김영자', '강승기', '김영자']
# 후보별 득표수 사전
vote_counter = {}
# 리스트 votes를 이용해서 사전 vote_counter를 정리하기
# 후보 이름이 없으면 넣어주고, 있으면 1 추가
for name in votes:
if name in vote_counter:
vote_counter[name] += 1
else:
vote_counter[name] = 1
# 후보별 득표수 출력
print(vote_counter)
4. 파이썬 데이터의 비밀
Aliasing
Aliasing(에일리어싱) : 객체의 별칭(alias)
한 객체에 대해 여러 개의 이름(변수)을 가지는 것.
실제 데이터를 직접 포함하는 것이 아니라, 데이터가 저장된 메모리 위치를 참조하는 방식으로 동작함.
하나의 데이터에 여러 개의 변수 이름을 할당하여 동일한 데이터에 접근할 수 있음.
이 때, 하나의 변수 이름을 통해 해당 데이터를 변경하면 다른 모든 변수 이름으로도 동일한 변경 결과가 반영됨.
original_list = [1, 2, 3]
alias_list = original_list # original_list와 동일한 객체를 가리키는 alias_list 변수
# original_list와 alias_list는 동일한 객체를 가리키기 때문에 하나를 수정하면 다른 하나도 영향을 받습니다.
alias_list.append(4)
print(original_list)
# 출력결과 : [1, 2, 3, 4]
리스트와 문자열
"""
리스트
"""
alphabet_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
print(alphabet_list[0]) # A
print(alphabet_list[1]) # B
print(alphabet_list[4]) # E
print(alphabet_list[-1]) # J
"""
문자열
"""
alphabet_string = 'ABCDEFGHIJ'
print(alphabet_string[0]) # A
print(alphabet_string[1]) # B
print(alphabet_string[4]) # E
print(alphabet_string[-1]) # J
"""
리스트 슬라이싱
"""
alphabet_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
print(alphabet_list[0:5])
# 0부터 4까지
# ['A', 'B', 'C', 'D', 'E']
print(alphabet_list[4:])
# 4부터 끝까지
# ['E', 'F', 'G', 'H', 'I', 'J']
print(alphabet_list[:4])
# 0부터 3까지
# ['A', 'B', 'C', 'D']
"""
문자열 슬라이싱
"""
alphabet_string = 'ABCDEFGHIJ'
print(alphabet_string[0:5]) # ABCDE
print(alphabet_string[4:]) # EFGHIJ
print(alphabet_string[:4]) # ABCD
# 리스트와 문자열 연결
str_1 = 'Hello'
str_2 = 'World'
str_3 = str_1 + str_2
print(str_3)
# HelloWorld
list_1 = [1, 2, 3, 4]
list_2 = [5, 6, 7, 8]
list_3 = list_1 + list_2
print(list_3)
# [1, 2, 3, 4, 5, 6, 7, 8]
# len 함수
my_list = [2, 3, 5, 7, 11]
print(len(my_list)) # 5 (5개)
my_string = 'Hello world!'
print(len(my_string)) # 12 (12개-띄어쓰기, 문장부호 포함)
# 리스트와 문자열의 차이
numbers = [1, 2, 3, 4]
numbers[0] = 5
print(numbers) # [5, 2, 3, 4]
"""
name = 'codeit'
name[0] = 'C'
print(name)
오류가 나옴
- 리스트는 수정해도 되지만 문자열은 수정할 수 없음.
- 문자열 더하기는 가능함
"""
자릿수 합 구하기
# 자리수 합 리턴
def sum_digit(num):
sum = 0
string = str(num)
for digit in string:
sum += int(digit)
return sum
# sum_digit(1)부터 sum_digit(1000)까지의 합 구하기
answer = 0
for i in range(1, 1001):
answer += sum_digit(i)
print(answer)
모범답안이랑 변수 이름빼고 거의 똑같음.
팰린드롬
def is_palindrome(word):
for i in range(len(word) // 2):
if word[i] != word[len(word)-1-i]:
return False
return True
# 테스트 코드
print(is_palindrome("racecar"))
서로 배타적인 조건에서 각각 다른 결과값이 나온다고 하면 return문 자체를 2개 이상 사용해도 상관없음.
'코드잇 Codeit > Python / ML / DL' 카테고리의 다른 글
[코드잇] 객체 지향 프로그래밍 in Python - 객체 지향 프로그래밍이란 (0) | 2023.09.10 |
---|---|
[코드잇] 데이터 사이언스 기초 - DataFrame 다루기 (0) | 2023.09.04 |
[코드잇] 데이터 사이언스 기초 - 데이터 사이언스 시작하기 (1) | 2023.09.02 |
[코드잇] 파이썬 프로그래밍 기초 - 파이썬 응용하기 (0) | 2023.08.04 |
[코드잇] 파이썬 프로그래밍 기초 - 프로그래밍 핵심 개념 in Python (0) | 2023.07.31 |