본문 바로가기

study

혼공 파이썬 3주차

4장의 내용이 python에서도 제일 중요하고, 모든 프로그램에서도 제일 중요한 부분인것 같습니다.

그 이유는 반복문이 있고, 자료형에 대해서 다루기 때문입니다.

보통 사용하는 방식만 사용하는 패턴이 있어서 이렇게 전반적인 주요 메소드를 살펴보고 

동작방식을 이해하는것은 많은 도움이 될 것 같습니다.

이번장에서는 중요하다고 생각되는 부분이 많아서, 색깔 표시가 많은것 같습니다.

 

■ 요약

# 1. 리스트 
# 형태 : [ ] 대괄호를 사용
# 숫자는 그냥 입력함
# 요소 구성시 "", '' 모두 사용가능함
list = [1,2,"a","b",'c','12'] 
# 오류 : IndexError (리스트는 index기반)

# 2. 딕셔너리
# 형태 : { } 중괄호를 사용
# 키 정의시 "key", 'key' 모두 사용이 가능함
# key, value형태로 구성함
dict = { 
         "name":"홍길동", 
         "age" : "20"
        }
# 오류 : keyError (딕셔너리는 key기반)

 

■ 리스트

  • 문자열 parsing하는것처럼 리스트 항목을 추출할수 있다
list = [0,1,2,3,4,5]
list[0] 	# 0
list[1:3] 	# 1,2
list[-1]	# 5
  • 이런 패턴을 눈여겨 보면 좋을것 같다. 이중으로 사용하는 경우
    • 리스트 요소에서 이중으로 [][]를 이용해서 접근할수 있는데
      이때 숫자에 대해서는 접근할수 없고, 문자열의 요소에서만 사용이 가능한다.
list = [123, "123", "abc", "야구"]
a = list[0]     # 123
b = list[1][0]  # 1 
c = list[2][1]  # b
d = list[3][1]  # 구
  • 리스트 안에 리스트 구성하기
    • 리스트안에 리스트는 갯수가 동일하지 않아도 된다
    • 위에서 학습한 요소에서 특정 문자열 찾기도 검증해본다. [ ][ ][ ]  // 잘 동작한다.
    • 조금 더 고차원 배열을 다루는 numpy라는 라이브러리도 참고하면 좋을것 같다.
list = [[1,2], [3,4,5,2,2,3], [6,7]]
list            # [[1, 2], [3, 4, 5, 2, 2, 3], [6, 7]]
a = list[0]     # [1, 2]
b = list[1]     # [3, 4, 5, 2, 2, 3]
c = list[2]     # [6, 7]


# [][][] 동작되는지 확인해보기
list = [[1,2], [3,"홍길동",5], [6,7]]

a = list[1][1][:]       # 홍길동
b = list[1][1][0]       # 홍
  • 리스트 연산 : 연결(+), 반복(*), len()
    • 리스트는 리스트와 + 을 연산해야지 오류없이 정상 수행된다.
list_a = [1,2]
list_b = [3,"길동",5]
list_c = ["##", "@@", 6]
sum_list = list_a + list_b + list_c  # [1, 2, 3, '길동', 5, '##', '@@', 6]

a = "a"
list_a = [1, 2]
sum_list = a + list_a       # TypeError: must be str, not list

list_a = [1, 2]
sum_list = list_a * 2      # [1, 2, 1, 2]
  • 리스트에 요소 추가하기 : append(), insert(), extend()
    요소를 추가하는 방식이 여러가지가 있습니다.
    > append() : list 맨 뒤에 추가됩니다.
    > insert() : list 중간에 원하는 위치에 추가됩니다.
    여기서 insert수행시 -1을 이용해서 넣으면 맨 마지막 요소에 추가되는것이 아니고, 기존 요소 앞에 들어가고 있습니다.
    맨 뒤에 요소를 추가할때는 append를 사용하는것이 제일 편하고 혼돈이 안될거 같습니다.

    > extend() : 여러 요소를 한꺼번에 넣을때 사용합니다.
       extend는 list를 + 더하는 기능과 동일하게 결과가 출력됩니다.
       p. 201) 비파괴적 ,파괴적이라는 개념 : 원본데이터가 회손되는지 안되는지 차이가 발생합니다.
       append, insert는 한가지 요소만 넣을수 있습니다.
list = ["insert",]  # 뒤에 ,을 넣어도 무시됩니다.
list.append("a")
list.append(1)
list.append("#")

print(list) # ['insert', 'a', 1, '#']

list = ["insert"]  # 뒤에 ,을 넣어도 무시됩니다.
# 계속 앞으로 넣기
list.insert(0,"a")      # ['a', 'insert']
list.insert(0,"b")      # ['b', 'a', 'insert']
list.insert(0,"c")      # ['c', 'b', 'a', 'insert']
# -1을 이용하면 어떻게 될까?
list.insert(-1,"minus-position")    # ['c', 'b', 'a', 'minus-position', 'insert']
list.insert(3,"3")                  # ['c', 'b', 'a', '3', 'minus-position', 'insert']

# insert -1을 활용해서 해보기
# 결론은 마지막요소 앞에 들어가는 동작방식입니다.
list = [1,2,]
print(list[-1])     # 2
list.insert(-1,3 )
list.insert(-1,4 )
list.insert(-1,5 )
print(list)         # [1, 3, 4, 5, 2]

# extend기능
list = ["insert",]  # 뒤에 ,을 넣어도 무시됩니다.
list.extend(["a",1,2,])
print(list)             # ['insert', 'a', 1, 2]

list = ["insert",]  # 뒤에 ,을 넣어도 무시됩니다.
list_b = ["a",1,2,]

print(list + list_b)    # ['insert', 'a', 1, 2]
  • 리스트에 요소 제거하기
    크게 2가지 방법으로 나뉩니다.
    ① 인덱스로 제거하기 : del키워드 또는 pop()함수
       형식 : del 리스트명[인덱스]
                 ex) del list[1],  del list[1:3],  del list[:3],  del list[3:]
       형식 : 리스트명.pop(인덱스)    
    ② 값으로 제거하기 : remove()
        형식 : 리스트.remove(값)
               list[1,2,1,2].remove(2)  # 1,1,2  (동일한 값이 있는경우 첫번째 것만 제거한다)
      
리스트 슬라이싱 (p. 204)

리스트[시작_인덱스: 끝_인덱스 : 단계]
기존에 list[1:5]는 단계에 1이 생략된 형태입니다. list[1:5:1]과 같은 의미입니다.
list[1,2,3,4,5,6,7,8]
list[0:5:2]   # 결과[1,3,5]
list[::-1]     # 결과 [8,7,6,5,4,3,2,1]  리스트 역순으로 처리하기 쉬운 방법
  • 모두 제거하기 : clear()
  • 리스트 정렬하기 : sort()
    • 기본 오름차순 정렬
    • 내림차순 : sort(reverse=True)
  • 리스트 내부에 있는지 확인하기 : in / not in 연산자
    • 보통 in을 사용하는데, not in도 잘 할용하자

■ for 반복문
    형식 :  for 반복자 in 반복할수 있는것

반복할수 있는 부분에 문자열, 리스트, 딕셔너리, 범위 등이 올 수 있다.

# 범위
for i in range(100):
    pass

# 리스트
for i in [1,2,3]:
    pass

# 문자열
for i in "배고파":
    print(i)  # 배, 고, 파 하나씩 출력됨
매우 중요한, 전개연산자
전개연산자라는 것보다 *args 이런 코드를 보시거나, 앞으로 언제인가 자주 보는 패턴입니다.

*리스트 =  리스트[0], 리스트[1],.........
리스트 요소를 전개하여 입력한 것과 같은 효과를 냅니다.
보통 인자값으로 아래와 같은 패턴으로 많이 사용합니다.
요약하면 *표시는 list [1,2,3] 형태의 리스트를 처리하는 것입니다.
** 의 형태는 dictionary를 처리합니다.

 

■ 딕셔너리

  • key, value로 구성됨
    • value에는 문자열, 숫자, bool, 리스트, 딕셔너리 모두 넣을수 있다.
dict = {"a" : 1,  "b" : 2}

# key을 이용할경우 []을 이용 (리스트와 비슷한 대괄호 이용)
dict["a"]   # 1
dict['b']   # 2
  • 딕셔너리에 값 추가하기/제거하기
    • 추가 하기
      • 딕셔너리[새로운키] = 새로운값
    • 기존 동일 key를 이용할 경우, 기본 값이 변경됩니다.
    • 제거 하기 
      • del 딕셔너리[새로운키]
      • list처럼 값을 이용해서 remove는 기능은 없다.
  • 딕셔너리 내부에 키가 있는지 확인하기 
    • in 키워드 / get() 함수 2가지 방식으로 체크합니다.
      • in은 if문으로 조절을 하고,
      •  
# in 으로 체크하는 방법 
# L if문을 이용해서 True / False로 체크하는 방식

dict = {"a" : 1 }
if key in dict:
    pass # 해당 key값이 있는 경우
else:
    pass # 해당 key값이 없는 경우
    
    
# get() 함수로 체크하는 방법
check_key = dict.get("key값")
# check_key값은 
# L key가 정상적으로 있으면 그에 따른 Value값을 return
# L key가 존재하지 않는경우, None값을 return

 

■ 범위 자료형
    보통 쉽게 반복문에 범위를 구성할때 사용을 함

    range안에 인자값은 정수형을 사용해야 한다.

range(1) 
range(1,2) 
range(1,2,3) 

# 리스트 구성시, 숫자 다 안쓰고 쉽게 구성하기
range(5) 
=> range(0,5) 
=> list(range(5)) # [0,1,2,3,4]

list(range(0,5))   # [0,1,2,3,4]
list(range(5,10))  # [5,6,7,8,9]

list(range(0,10,2))  # [0,2,4,6,8]
list(range(0,10,3))  # [0,3,6,9]
  • 반대로 반복하기
# 역순으로, 반대로 반복하기
for i range(4, 0, -1):
    pass
    
# reversed
for i in reversed(range(5)):
    pass

# 4,3,2,1,0

 

■ while 반복문

# 형식
while bool-표현식:
    문장


# 실행
while True:
    문장

while i < 10:
    문장

# break; continue;

 

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

  • 리스트에서 사용 : min(), max(), sum()
    L DB에서 함수처럼 사용
  • 리스트에서 사용 : reversed() 뒤집기
  • enumerate()함수와 반복문 조합하기

■ 기본미션

리스트, 딕셔너리, 범위 자료형에 대해 이해한 내용을 바탕으로 포스팅하기 - 완료

 

■ 선택미션

p.213쪽의 1번 문제의 답 쓰고 인증샷

list_a = [0,1,2,3,4,5,6,7]

list_a.extend(list_a)   # [0,1,2,3,4,5,6,7, 0,1,2,3,4,5,6,7]
list_a.append(10)       # [0,1,2,3,4,5,6,7,10] 맨뒤에 추가
list_a.insert(3,0)      # [0,1,2,0, 3,4,5,6,7]
list_a.remove(3)        # [0,1,2,4,5,6,7]      해당 value삭제
list_a.pop(3)           # [0,1,2,4,5,6,7]      3번째 항목 제거
list_a.clear()          # []

'study' 카테고리의 다른 글

혼공 파이썬 5주차  (0) 2022.08.13
혼공 파이썬 4주차  (0) 2022.07.31
혼공 파이썬 2주차  (0) 2022.07.05
혼공 파이썬 1주차  (0) 2022.07.04
혼공 머신러닝/딥러닝 6주차  (0) 2022.02.26