본문 바로가기

Language/python

혼공학습단 8기 파이썬 3주차

뒤늦게 작성하는...

혼공학습단 8기 파이썬 3주차 공부

 

리스트 자료형: 여러가지 자료를 저장할 수 있는 자료

- 하나의 리스트 내 여러 자료형으로도 구성 가능하다.

신기하지?

리스트 연산자

  • + : 리스트 연결 연산자
  • * : 리스트 반복 연산자 
  • len(): 괄호 안에 문자열을 넣으면 문자열의 길이를 세어주나, 리스트 변수를 넣으면 요소의 개수를 세어준다.

 

리스트 요소 추가하기

  • 리스트명.append(요소)
  • 리스트명.insert(위치, 요소)
  • 리스트명.extend(리스트): 한번에 여러 요소를 추가할 때 사용

 

리스트 연결 연산자 +를 이용하는 경우 ▶ 비파괴적

리스트 요소 추가 함수들을 이용하는 영우 ▶ 파괴적

원본에 어떠한 영향도 주지 않는 것을 비파괴적이라 한다.

 

 

리스트 요소 제거

  • del 리스트명[인덱스]
  • 리스트명.pop(인덱스)
  • 리스트명.remove(값): 리스트 내부 특정 값을 제거. 먼저 발견되는 값을 제거한다.
  • 리스트명.clear(): 리스트 내 모든 요소 제거

del과 pop 사용

del 키워드를 사용하는 경우, 범위를 지정하여 리스트 요소를 한번에 제거할 수 있다.

del arr[3:6]의 겨우, 3~5번째 요소들 제거됨.

 

 

리스트 내부에 해당 값이 있는가? 반환값은 True/Fasle

→ 값 in 리스트명

 

리스트 내부에 해당 값이 없는가? 반환값은 True/Fasle

→ 값 not in 리스트명

 


 

For 반복문

컴퓨터에 반복을 지시하는 문법.

# basic한 반복분
For i in tange(100):
	print("반복문 출력")
    
# 리스트와 함께 사용하는 반복문
for 반복자 in 반복할 수 있는 것:
	#코드
    pass

참고로 반복할 수 있는 것 항목에는 문자열도 가능하다.

for character in "안녕하세요":
	print(character)

 


 

딕셔너리 자료형: 키를 기반으로 값을 저장하는 것

자료형 의미 가리키는 위치 선언 형식
리스트 인덱스를 기반으로 값을 저장 인덱스 변수 = []
딕셔너리 키를 기반으로 값을 저장 변수 = {}

 

 

딕셔너리 요소에 접근하기 위해서는, 리스트처럼 딕셔너리 뒤에 대괄호를 입력하고 키를 입력하면 된다.

 

딕셔너리 내부 값에는 다양한 자료를 넣을 수 있다. 문자열, 숫자, BOOL, 리스트, 딕셔너리까지..

 

자료형 선언형식 사용 예 틀린 예
리스트 list_a = [] list_a[1]  
딕셔너리 dict_a= {} dict_a["name"] dict_a{"name"}

 

인덱스를 사용하여 특정 값을 출력할 수도 있다.

 

# 딕셔너리에 요소 제거
dict_a = {"name":"피카츄","skill":"윙크하기"}
del dict_a["name"]
# 결과 dict_a = {"skill":"윙크하기"}

 

in 키워드

- 딕셔너리 내부에 값이 있는지 없는지 확인할 때 사용한다.

- 다음 예제는 접근하고자 하는 키를 입력받은 후, 존재하는 경우에만 접근하여 값을 출력.

- 존재하지 않는 키에 접근할 때 생기는 KeyError 예외가 발생할 일이 없음. 

dict_a = {
    'name': '피카츄', 
    'skill': ['윙크하기','뽀뽀하기','몸통박치기'],
    'type': '전기타입'
    }

key = input("> 접근하고자 하는 키 입력: ")

if key in dict_a:
    print(dict_a[key])
else:
    print("키가 없음")

 

get() 함수

- 딕셔너리의 키로 값을 추출하는 기능.

- dictionary['key']와 같은 기능을 수행하나, 존재하지 않는 키에 접근할 경우 KeyError 예외가 발생 X

- 대신 None을 출력

dict_a = {
    'name': '피카츄', 
    'skill': ['윙크하기','뽀뽀하기','몸통박치기'],
    'type': '전기타입'
    }

value = dict_a.get('missing')
print("값: ",value)

if value==None:
    print("존재하지 않는 키에 접근함")

 

# for 반복문과 딕셔너리 사용하기
dict_a = {
    'name': '피카츄', 
    'skill': ['윙크하기','뽀뽀하기','몸통박치기'],
    'type': '전기타입'
    }

for key in dict_a:
	print(key," : ",dict_a[key])

 


 

범위(range) 자료형: for 반복문과 많이 사용. 특정 횟수만큼 반복

1) 매개변수에 숫자 한 개를 넣는 방법

2) 매개변수에 숫자 두 개를 넣는 방법

3) 매개변수에 숫자 세 개를 넣는 방법

# 1)
ramge(num): 0 ~ num-1을 범위로 함

# 2)
range(n,m): n ~ m-1을 범위로 함

# 3)
range(n, m, v): n ~ m-1를 범위로 하나, 앞 뒤 숫자가 v만큼의 차이를 가진다.

 

※ 단, range() 함수의 매개변수로는 반드시 정수를 입력해야 함.

range(0, 50/2) # TypeError 발생
range(0, int(50/2)) # 성공. 실수를 정수로 바꾸는 방법
range(0, 50 // 2) #성공. //는 정수 나누기 연산자

정수 나누기 연산자(//): 소숫점 이하의 자릿수를 떼어버린 후 정수 부분만 남기는 연산자이다.

 


 

문자열, 리스트, 딕셔너리와 관련된 함수

리스트에 작용할 수 있는 기본 함수

  • min(): 리스트 내부에서 최솟값 찾기
  • max(): 리스트 내부에서 최댓값 찾기
  • sum(): 리스트 내부에서 값을 모두 더하기

 

 

리스트 뒤집기 reversed()

※ 주의할 점: reversed() 함수의 결과는 제너레이터이다. 제너레이터란 파이썬의 특별한 기능으로, 여러 개의 데이터를 미리 만들어 놓지 않고 필요할 때마다 즉석해서 하나씩 만들어낼 수 있는 객체이다.

어렵다면... "1회용 함수" 라고 생각하면 되겠다.

list_a=[1,2,3,4,5]
temp = reversed(list_a)

for i in temp:
	print("반복문 1번 {}".format(i))
    
for i in temp:
	print("반복문 2번 {}".format(i))

결과

결과와 같이 반복문 2번은 출력되지 않는다. 이는 reversed() 함수의 결과가 제너레이터이기 때문이다.

 

궁금해서 시도해보니.. 다음과 같이 쓰면 반복문1번, 2번 모두 출력된다.

list_a=[1,2,3,4,5]
temp = reversed(list_a)

for i in temp:
	print("반복문 1번 {}".format(i))

temp = reversed(list_a)
for i in temp:
	print("반복문 2번 {}".format(i))

 

그래도.

reversed() 함수와 반복문을 조합할 때는 함수의 결과를 여러번 활용하지 말고..

아래와 같이 for 구문 내부에 reversed() 함수를 곧바로 넣어서 사용하자.

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

for i in reversed(list_a):
	print("반복문 1번 {}".format(i))
    
for i in reversed(list_a):
	print("반복문 2번 {}".format(i))

 

 

현재 인덱스가 몇번째인지 확인하기: enumerate()

리스트 + range()로 반복문

# enumerate() 사용하지 않고 리스트 요소 반복하기
list_a = ['넘버원','넘버투','깍두기']
for i in range(len(list_a)):
    print("{}번째 요소는 {}입니다.".format(i,list_a[i]))

사용X

리스트 + enumerate()로 반복문

# enumerate() 사용하여 리스트 요소 반복하기
import enum

list_a = ['넘버원','넘버투','깍두기']
print("enumerate(list_a)", enumerate(list_a))
print("list(enumerate(list_a)",list(enumerate(list_a)))

for i,j in enumerate(list_a):
    print("{}번째 요소는 {}입니다.".format(i,j))

 

사용 O

 

딕셔너리로 easy하게 반복문 작성하기: item()

딕셔너리로 반복문 작성 시 items()함수를 사용하면 쉽게 반복문을 작성할 수 있다.

dict_a={
    "key_1":"value_1",
    "key_2":"value_2",
    "key_3":"value_3",
}

print("# 딕셔너리 items()함수 사용")
print("items(): ",dict_a.items())
print()

print("# 딕셔너리 + items() 함수 조합한 반복문")
for key,value in dict_a.items():
    print("dictionary[{}] = {}".format(key,value))

 

가장 중요한 "리스트 컴프리헨션(comprehension)"

중요한 이유: 예전에 본 코드에서 헷갈렸던 것중 하나임. 컴프리헨션(리스트 딕셔너리 셋 포함) 구문 보고 이해 못했던 기억이 강렬하다..

# Basic
array = []

for i in range(0,20,2):
    array.append(i*i)
print(array)

# list comprehension
array = [i*i for i in range(0,20,2)]

print(array)

같은 결과

의미: range(0,20,2)의 요소를 i라고 할 때, i*i로 리스트를 재조합해달라.

 

리스트 이름 = [ 표현식 for 반복자 in 반복할 수 있는 것 ]

 

 

# list comprehension
array = ['사과','자두','초콜릿','바나나','체리']
result = [fruit for fruit in array if fruit != "초콜릿"]

print(result)

결과

의미: array의 요소를 fruit라고 할 때, 초콜릿이 아닌 fruit로 리스트를 재조합해달라.

 

리스트 이름 = [ 표현식 for 반복자 in 반복할 수 있는 것 if 조건문 ]

 

 


3주차 추가미션

157p 확인문제 1번