<Do it! 자료구조와 함께 배우는 알고리즘 입문>
2장 기본 자료구조와 배열
02-2 배열이란?
배열 원소의 최댓값 구하기
a = [1, 2, 3] 일 때 최댓값 구하기
a = [1, 2, 3, 4]일 때 최댓값 구하기
a = [1, 2, 3, 4]
max = a[0]
for i in range(1, len(a)):
if a[i] > max:
max = a[i]
print(max)
배열 원소의 최댓값을 구하는 함수 구현하기
from typing import Any, Sequence
def max_of(a: Sequence) -> Any:
maximum = a[0]
for i in range(1, len(a)):
if a[i] > maximum:
maximum = a[i]
return maximum
if __name__ == '__main__':
print('배열의 최댓값을 구합니다.')
num = int(input('원소 수를 입력하세요.: '))
x = [None] * num
for i in range(num):
x[i] = int(input(f'x[{i}]값을 입력하세요.:'))
print(f'최댓값은 {max_of(x)}입니다.')
Q1. 시퀀스 원소의 최댓값 출력하기
시퀀스 자료형 - 순서가 있는 자료형.
Q2. 주석과 자료형 힌트
from typing import Any, Sequence
- Any : 제약이 없는 자료형
- Sequence : sequence type 시퀀스형, list, bytearry, str, tuple, bytes
def may_of(a: Sequence) -> Any:
- 매개변수 a의 자료형은 Sequence
- 출력하는 것은 Any
Q3. 재사용할 수 있는 모듈 작성하기
module - 하나의 스크립트 프로그램(.py)
여기서 __name__ : 모듈 이름을 나타내는 변수
__name__= '__main__'인지 확인한다. (max.py를 직접 시작한 경우)
변수 __name__은 원래 모듈의 이름임
모듈 객체 : __name__, __loader__, __package__, etc
모듈 테스트하기
max로 정의된 max_of() 함수 호출하기
- 입력받을 때 원소 수를 결정하기
#from max import max_of
print("배열의 최댓값을 구합니다.")
print("주의: 'End'를 입력하면 종료합니다.")
number = 0
x = []
while True:
s = input(f'x[{number}]값을 입력하세요.:')
if s == 'End':
break
x.append(int(s))
number += 1
print(f'{number}개를 입력했습니다.')
print(f'최댓값은 {max_of(x)}입니다.')
f'어쩌구 {number} 어쩌구 ' 형식으로 쓰면, {number}에 변수값이 출력된다.
배열의 원솟값을 난수로 결정하기
입력 : 배열 원소 수, 최댓값, 최솟값
출력 : 1) 그 값 사이의 원소는 난수로 구성함
import random
def random_list(n, max, min):
x = [None]*n
for i in range(n):
x[i]= random.randint(min, max)
return x
print(random_list(5, 7, 0))
예제 코드
from typing import Any, Sequence
def max_of(a: Sequence) -> Any:
maximum = a[0]
for i in range(1, len(a)):
if a[i] > maximum:
maximum = a[i]
return maximum
import random
#from max import max_of
print('난수의 최댓값을 구합니다.')
num = int(input('난수의 개수를 입력하세요.: '))
lo = int(input('난수의 최솟값을 입력하세요.: '))
hi = int(input('난수의 최댓값을 입력하세요: '))
x = [None] * num
for i in range(num):
x[i] = random.randint(lo, hi)
print(f'{(x)}')
print(f'이 가운데 최댓값은 {max_of(x)}입니다.')
튜플, 문자열, 문자열 리스트의 최댓값 구하기
* 각 배열 원소의 최댓값을 구해서 출력하기
입력 : t = (4, 5, 6, 7, 2, 3.14, 9)
s = 'string'
a = ['D', 'Da', 'TAE']
출력: 7, t, TAE
from typing import Any, Sequence
def max_of(a: Sequence) -> Any:
maximum = a[0]
for i in range(1, len(a)):
if a[i] > maximum:
maximum = a[i]
return maximum
#각 배열 원소의 최댓값을 구해서 출력하기
t = (4, 5, 6, 7, 2, 3.14, 9)
s = 'string'
a = ['D', 'Da', 'TAE']
#출력: 7, t, TAE
def max_of_Any(a):
return max_of(a)
print(max_of_Any(a))
print(max_of_Any(s))
print(max_of_Any(t))
* max_of() 함수가 Any라서 튜플, 리스트, str도 되는건가?
따로따로 생성한 리스트, 튜플의 동일성 판단하기
lst1 = [1]
lst2 = [2]
로 정의했을 때
lst1 is lst2는 False임
- identity 식별번호가 다르기 때문(고정된 값 literal이 아님)
literal : 값 그 자체, 고정된 값(ex) 정수, 실수, 복소수 등)
리스트 스캔
방법 1. 원소 수를 len()로 미리 알아내어 원소 수 -1까지 반복함
x = ['a', 'b', 'c', 'd']
for i in range(len(x)):
print(f'x[{i}] = {x[i]}')
방법 2. 인덱스와 원소를 짝지어 enumerate()함수로 반복하여 꺼낸다.
x = ['a', 'b', 'c', 'd']
for i, n in enumerate(x):
print(i, n)
방법 3. 1부터 카운트를 시작한다.
x = ['a', 'b', 'c', 'd']
for i, n in enumerate(x, 1):
print(i, n)
방법 4. 인덱스값 대신 in을 사용한다.
x = ['a', 'b', 'c', 'd']
for i in x:
print(i)
튜플의 스캔
[] -> ()
이터러블
반복 가능한 - iterable 객체 : 문자열, 리스트, 튜플, 집합, 딕셔너리 등
iter()
iterator
__next__
next()
StopIteration
'Computer Science > 자료구조' 카테고리의 다른 글
[4.23] 배열이란? (1) | 2021.04.23 |
---|---|
[4.21] 02-1 배열하는 알고리즘 (2) (1) | 2021.04.21 |
[4.19] 02-1 자료구조와 배열(1) (1) | 2021.04.19 |
[4.18] 01-2 반복되는 알고리즘 (마무리) (0) | 2021.04.18 |
[4.18] 01-2 반복하는 알고리즘 (0) | 2021.04.18 |