혼공파 42 ~ 47강
1. 리스트와 딕셔너리 관련 기본 함수
# 리스트 기본 함수
a = [52, 273, 32, 103, 57]
print(max(a)) # 273 리스트 내에 가장 큰 값
print(max(*a)) # 리스트 전개 연산자 활용
print(min(a)) # 32 리스트 내에 가장 작은 값
print(min(*a))
print(sum(a)) # 517 리스트의 합계
# reversed() 함수
# 결과 : 한 번만 사용 가능! (이 후 이터레이터 / 클래스 관련 이유)
for i in reversed(range(0, 10)):
print(i)
# enumerate() 함수
fruits = ["바나나", "사과", "포도"]
a = enumerate(fruits)
print(list(a)) # [(0, '바나나'), (1, '사과'), (2, '포도')]
# 리스트를 순차적으로 번호를 매겨 튜플 자료형으로 출력
# 결과 한 번만 사용 가능!
for fruit in enumerate(fruits):
print(fruit[0], fruit[1])
for i, fruit in enumerate(fruits):
print(i, fruit)
# 딕셔너리 기본 함
# items()
a = {
"이름": "바나나",
"가격": 1500,
"원산지": "말레이시아"
}
for key in a:
print(key, a[key])
for 키, 값 in a.items():
print(키, 값)
# 딕셔너리 키, 값을 간단하게 불러올 수 있음
# 구분[?] : 그냥 이렇게 만들어짐.. 외워야 함
## 함수형 프로그래밍 이념
reversed(a)
## 객체 지향 프로그래민 이념
a.items()
# 자동완성 기능에 의지해서 쓰면 된다.
2. 리스트 내포
# 리스트 내포 (List comprehension)
# 반복 가능한 것을 기반으로 새로운 리스트를 만들어내는 문법
# An = 2n + 1 (0 <= n < 10)
# A = {1, 3, 5, 7, 9, ... , 19}
A = []
for i in range(0, 10):
A.append(2 * i + 1)
print(A) # [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
달러 = [155.43, 302.71, 77.46, 131.28]
원화 = []
for dollar in 달러:
원화.append(dollar * 1399)
print(원화)
# 리스트 내포의 형 (굉장히 자주 사용한다)
# [표현식 for 반복문 + 조건문도 결합 가능]
A = [2 * i + 1 for i in range(0, 10)]
print(A) # [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
원화 = [dollar * 1399 for dollar in 달러]
print(원화)
A = [
2 * i + 1 # 표현식
for i in range(0, 10) # 반복절
if i % 2 == 0 # 조건절
] # 순서대로 와야함
print(A)
3. join() 함수 - 구문 내부에 여러줄 문자열을 사용했을 때 문제점 해결
number = int(input("정수 입력> "))
# 여러 줄 문자열을 사용 시 코드 가독성을 위해
# 앞쪽을 들여 쓰기하고 싶은데 출력에 영향을 미친다
# 이를 해결하기 위해 다음 2가지 방법을 사용한다.
# 1. 괄호를 사용해서 해결
# 괄호 안에서 여러개의 문자열을 그냥 한줄로 인식
# 잘 사용되지는 않는 문법
if number % 2 == 0:
print(
f"입력한 문자열은 {number}입니다. \n"
f"{number}는(은) 짝수입니다."
)
# 2. join()를 사용해서 해결 [굉장히 많이 활용]
# print("".join(["A","B","C"]))
else:
print("\n".join([
f"입력한 문자열은 {number}입니다.",
f"{number}는(은) 홀수입니다."
]))
# 활용
A = [
[3, 2, 4, 5],
[1, 2, 2, 6],
[-1, -2, 2, 4]
]
for a in A:
a = [str(요소) for 요소 in a]
print(",".join(a))
4. 연습문제
# 1 ~ 100 사이에 숫자를 2진수로 변환했을 때 0이 하나만 포함된 숫자들을 출력하고 그 숫자들의 합을 구하시오.
# 1. 10진수 2진법 변환
f"{10:b}" # 값을 2진수로 변환
f"{10:o}" # 값을 8진수로 변환
f"{10:x}" # 값을 16진수로 변환
int("1010", 2)
int("12", 8)
## 다른 진수를 10진수로 바꿀때는 int() 사용
## 문자열로 다른 진수의 수를 쓰고 , 몇 진수인지 숫자를 씀
for i in range(1, 100 + 1):
print(f"{i:b}")
# 2. 글자 세기
# count() 함수
# "1010".count("1") 해당 문자열이 몇개가 있는지 출력
a = []
for i in range(1, 100 + 1):
변환 = f"{i:b}"
if 변환.count("0") == 1:
print(i, ":", 변환)
a.append(i)
print("합계:", sum(a))
# 위의 문제를 리스트 내포로 다시 써보기
a = [
i
for i in range(1, 100 + 1)
if f"{i:b}".count("0") == 1
]
for i in a:
print(i, ":", f"{i:b}")
print("합계:", sum(a))
# 리스트에서 몇 가지 종류의 숫자가 몇 번 사용되었는지 구하는 프로그램
A = [1, 2, 3, 4, 1, 2, 3, 1, 4, 1, 2, 3]
counter = {}
for a in A:
if a not in counter:
counter[a] = 0
counter[a] += 1
print(counter)
print(f" 사용된 숫자의 종류는 {len(counter)}개입니다.")
# DNA에서 염기의 개수 세기
A = "ctacaatgtcagtatacccattgcattagccgg"
counter = {}
for a in A:
if a not in counter:
counter[a] = 0
counter[a] += 1
print(counter)
print(f" 사용된 숫자의 종류는 {len(counter)}개입니다.")
# DNA 염기 코돈 개수 문자열을 3개씩 묶기
A = "ctacaatgtcagtatacccattgcattagccgg"
counter = {}
for i in range(0, len(A), 3):
a = A[i:i+3]
if len(a) != 3:
continue
if a not in counter:
counter[a] = 0
counter[a] += 1
print(counter)
print(f" 사용된 숫자의 종류는 {len(counter)}개입니다.")
# 2차원 리스트 평탄화
# 리스트가 중첩되어 있을 떄 중첩을 제거하는 처리를 리스트 평탄화
# [1, 2, [3, 4], 5, [6, 7], [8, 9]] -> [1, 2, 3, 4, 5, 6, 7, 8, 9]
A = [1, 2, [3, 4], 5, [6, 7], [8, 9]]
B = []
for a in A:
if type(a) == list:
for i in a:
# B.append(i)
B += [i] # 리스트 결합 연산자 활용
else:
# B.append(a)
B += [a]
print(f"{A}를 평탄화하면")
print(f"{B}입니다")
'Base > Python' 카테고리의 다른 글
12. 함수 / 매개변수 / 함수의 리턴 (1) | 2023.02.23 |
---|---|
11. 복잡도/프로그램/루틴/프로시저/메서드/함수 (0) | 2023.02.21 |
9. reversed() 함수 / while 반복문 / break / continue 키워드 (0) | 2023.02.18 |
8. 범위와 반복문 / 수열 / 온라인 저지 여러 줄 입력 받기 (2) | 2023.02.17 |
7. 딕셔너리와 반복문 (0) | 2023.02.15 |
댓글