코딩하는 타코야끼

[Python] 3강_자료구조 본문

[T.I.L] : Today I Learned/Python

[Python] 3강_자료구조

가스오부시 2023. 4. 4. 19:24
728x90
반응형

1. 자료구조란

📍 여러 개의 값들을 모아서 관리하는 데이터 타입.

  • 한 개의 변수는 한 개의 값 밖에는 가지지 못한다. 그러나 하나의 변수로 여러 개의 값 묶어서 저장해 관리해야 할 경우가 있다.
  • 예) 고객의 정보의 경우 이름, 나이, 주소, 전화번호 등 여러개의 값이 모여서 하나의 값이 된다.

📍 파이썬은 데이터를 모으는 방식에 따라 다음과 같이 4개의 타입을 제공한다.

  • List: 순서가 있으며 중복된 값들을 모으는 것을 허용하고 구성하는 값들(원소)을 변경할 수 있다.
  • Tuple: 순서가 있으며 중복된 값들을 모으는 것을 허용하는데 구성하는 값들을 변경할 수 없다.
  • Dictionary: key-value 형태로 값들을 저장해 관리한다.
  • Set: 중복을 허용하지 않고 값들의 순서가 없다.

📍 원소, 성분, 요소, element

  • 자료구조의 값들을 구성하는 개별 값들을 말한다.
  • len(자료구조) 함수
    • 자료구조 내의 원소의 개수를 반환한다.

2. List (리스트)

📍 개요

  • 값을 순서대로 모아서 관리하는 자료구조. 원소(element)들을 순번을 이용해 식별한다.
    • 각각의 원소가 어떤 값인지를 순번을 가지고 식별하기 때문에 순서가 매우 중요하다. 즉 같은 값에 대해 순서가 바뀌면 안된다.
  • 각 원소들은 순번을 index라고 하며 값을 조회하거나 변경할 때 index를 이용해 식별한다.
    • index는 문자열과 마찮가지로 양수 index와 음수 index 두개가 각 값에 생긴다.
    • 양수 index는 앞에서부터 음수 index는 뒤에서 부터 값을 식별할 때 사용하는 것이 편리하다.
  • 중복된 값들을 저장할 수 있다.
  • 각 원소들의 데이터 타입은 달라도 상관없다.
    • 보통은 같은 타입의 데이터를 모은다.
  • 리스트를 구성하는 원소들을 변경할 수 있다. (추가, 삭제, 변경이 가능)

📍List 생성 구문

  • [값, 값, 값, ..]
# type(값) : 값의 데이터타입을 반환
type(30), type(3.2), type(True), type("abc")
x = 30
type(x) == int
type(x) == bool #str #float

 False

📍 Indexing과 Slicing을 이용한 원소(element) 조회 및 변경

 🍀 Indexing

  • 하나의 원소를 조회하거나 변경할 때 사용
  • 리스트[index]
    • index의 원소를 조회
  • 리스트[index] = 값
    • index의 원소를 변경

 🍀 Slicing

  • 범위로 조회하거나 그 범위의 값들을 변경한다.
  • 기본구문: 리스트[ 시작 index : 종료 index : 간격]
    • 시작 index ~ (종료 index – 1)
    • 간격을 지정하면 간격만큼 index를 증/감한다. (생략 시 1이 기본 간격)
  • 0번 index 부터 조회 할 경우 시작 index는 생략가능
    • 리스트 [ : 5] => 0 ~ 4 까지 조회
  • 마지막 index까지 (끝까지) 조회 할 경우 종료 index는 생략 가능
    • 리스트[2 : ] => 2번 index 에서 끝까지
  • 명시적으로 간격을 줄 경우
    • 리스트[ : : 3 ] => 0, 3, 6, 9.. index의 값 조회
    • 리스트[1 : 9 : 2] => 1, 3, 5, 7 index의 값 조회
  • 시작 index > 종료 index, 간격을 음수로 하면 역으로 반환한다.(Reverse)
    • 리스트[5: 1: -1] => 5, 4, 3, 2 index의 값 조회
    • 리스트[: : -1] => 마지막 index ~ 0번 index 까지 의미. Reverse 한다.

 🍀 slicing을 이용한 값 변경

  • slicing 을 이용할 경우 slicing된 원소 개수와 동일한 개수의 값들을 대입한다.
    • 리스트[1:5] = 10,20,30,40 : index 1, 2, 3, 4의 값을 20으로 변경
    l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    #indexing - 한개값을 조회
    l[2] # 앞에서 세번째 값
    >>>7
    
    # 변경
    l[1] = 100
    print(l)
    >>>[0, 100, 2, 3, 4, 5, 6, 7, 8, 9]
    
    # Reverse
    l[::-1]
    >>>[9, 800, 7, 6, 5, 4, 3, 2, 100, 0]
    

📍List 연산자

  • 리스트 + 리스트
    • 두 리스트의 원소들을 합친 리스트를 반환한다.
  • 리스트 * 정수
    • 같은 리스트의 원소들을 정수번 합친 리스트를 반환한다.
  • in, not in 연산자
    • 값 in 리스트
      • 리스트의 원소로 값이 있으면 True, 없으면 False 반환
    • 값 not in 리스트
      • 리스트의 원소로 값이 없으면 True, 있으면 False 반환
  • len(리스트)
    • 리스트 내의 원소수를 반환.

📍중첩 리스트 (Nested List)

  • List가 원소로 List를 가지는 것을 말한다.
    • List를 포함한 모든 자료구조 타입들도 다 값이므로 다른 자료구조의 원소로 들어갈 수 있다.
l = [[1,2,3],[4,5,6],[7,8,9]]

l[0][1] # 0번째 박스에 1번 index 조회 - 중첩 List

>>2

📍List 대입

  • 리스트의 원소들을 각각 다른 변수에 대입하는 표현식
a, b, c = [100, 200, 300]
print(a, b, c)
>>> 100 200 300

🔮 List 주요 메소드 (중요!!!)


3. Tuple (튜플)

  • List와 같이 순서대로 원소들을 관리한다. 단 저장된 원소를 변경할 수 없다.
  • Tuple 은 각 위치(Index) 마다 정해진 의미가 있고 그 값이 한번 설정되면 바뀌지 않는 경우에 사용한다.
    • Tuple은 값의 변경되지 않으므로 안전하다.

📍 Tuple 생성

  • (value, value, value, ...)
  • 소괄호를 생략할 수 있다.
  • 원소가 하나인 Tuple 표현식
    • (value,) 또는 value,
      • 값 뒤에 , 를 붙여준다. ,를 붙이지 않으면 ( )가 연산자 우선순위 괄호가 된다.
    t1 = (1, 2, 3, 4, 5)
    t2 = ("A", "B", "C")
    t3 = ("A", 20, True)
    print(type(t1))
    
    >>> 
    <class 'tuple'>
    

📍Indexing과 Slicing을 이용한 원소(element) 조회

  • 리스트와 동일하다.
  • 단 튜플은 조회만 가능하고 원소를 변경할 수 없다.
t5 = (1,) # 원소가 1개인 튜플
t6 = 1, # "," 를 추가함으로 정수를 튜플로 변환 가능!!!!!!!!!!!!!
print(type(t5))
type(t6), len(t6)
>>> 
<class 'tuple'>
(tuple, 1)

📍Tuple 연산자

  • tuple + tuple
    • 두 tuple의 원소들을 합친 tuple을 반환한다.
  • tuple * 정수
    • 같은 tuple의 원소들을 정수번 합친 tuple를 반환한다.
  • in, not in 연산자
    • 값 in tuple
      • tuple의 원소로 값이 있으면 True, 없으면 False 반환
    • 값 not in tuple
      • tuple의 원소로 값이 없으면 True, 있으면 False 반환
  • len(tuple)
    • tuple의 원소 개수 반환

🔮 Tuple의 요 메소드


4. Dictionary

  • 값을 키(key)-값(value) 쌍으로 묶어서 저장하는 자료구조이다.
    • 리스트나 튜플의 index의 역할을 하는 key를 직접 지정한다.
    • 서로 의미가 다른 값들을 하나로 묶을 때 그 값의 의미를 key로 가질 수 있는 dictionary를 사용한다.
      • cf) 값의 의미가 같을 경우 List나 Tuple을 사용한다.
    • key-value 쌍으로 묶은 데이터 한개를 item 또는 entry라고 한다.

📍Dictionary 생성

🍀 구문

  1. { 키 : 값, 키 : 값, 키 : 값 }
  2. dict(key=value, key=value) 함수 이용
  • 키(key)는 불변(Immutable)의 값들만 사용 가능하다. (숫자, 문자열, 튜플) 일반적으로 문자열을 사용한다.
  • dict() 함수를 사용할 경우 key는 변수로 정의한다

🔮 Dictionary 원소 조회 및 변경

🍀 조회: index에 key값을 식별자로 지정한다.

  • dictionary[ key ]
  • 없는 키로 조회 시 KeyError 발생

🍀 변경

  • dictionary[ key ] = 값
  • 있는 key값에 값을 대입하면 변경이고 없는 key 일 경우는 새로운 item을 추가하는 것이다.
customer = {'이름': '홍길동', '나이': 20, '주소': '서울', '직업': '학생'}

📍Dictionary 연산자

  • in, not in 연산자
    • 값 in dictionary
      • dictionary의 Key로 값이 있으면 True, 없으면 False 반환
    • 값 not in tuple
      • dictionary의 Key로 값이 없으면 True, 있으면 False 반환
  • len(dictionary)
    • dictionary의 Item의 개수 반환

🔮 Dictionary 주요 메소드

 


5. Set

  • Set은 중복되는 값을 허용하지 않고 순서를 신경 쓰지 않는다.
    • 원소를 식별할 수 있는 식별자가 없기 때문에 Set은 indexing과 slicing을 지원하지 않는다

📍Set 생성

🍀 구문

  • {값, 값, 값 }
  • -빈 Dictionary 만들기
  • info = {}
  • 중괄호만 사용하면 빈 set이 아니라 빈 dictionary를 생성하는 것임.
s = {1, 2, 3, 4}
print(s)
>>>{1, 2, 3, 4}

s2 = {1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4 ,4 ,6, 7, 8, 5}
s2 # 중복 허용 (X)
>>>{1, 2, 3, 4, 5, 6, 7, 8}

📍Set 연산자

  • in, not in 연산자
    • 값 in Set
      • Set의 원소로 값이 있으면 True, 없으면 False 반환
    • 값 not in Set
      • Set의 원소로 값이 없으면 True, 있으면 False 반환
  • len(Set)
    • Set의 원소의 개수 반환

🔮 Set의요 메소드

🔮 Set의 집합연산 연산자 및 메소드

🍀 합집합

  • 집합A | 집합B
  • 집합A.union(집합B)
s1 = {1, 2, 3, 4, 5}
s2 = {3,4,5,6,7}
s3 = s1 | s2 # 합집합
print(s1)
print(s2)
print(s3)
>>>
{1, 2, 3, 4, 5}
{3, 4, 5, 6, 7}
{1, 2, 3, 4, 5, 6, 7}

------------

print(s1.union(s2))
>>>
{1, 2, 3, 4, 5, 6, 7}

🍀 교집합

  • 집합A & 집합B
  • 집합A.intersection(집합B)
# 교집합
s4 = s1 & s2
print(s4)
print(s1.intersection(s2))
>>>
{3, 4, 5}
{3, 4, 5}

🍀 차집합

  • 집합A - 집합B
  • 집합A.difference(집합B)
# 차집합
print(s1 - s2)
print(s1.difference(s2))
>>>
{1, 2}
{1, 2}

🔮 자료구조 변환 함수

🍀 list(자료구조)

  • 대상 자료구조/Iterable을 List로 변환한다.

🍀 tuple(자료구조)

  • 대상 자료구조/Iterable을 Tuple로 변환

🍀 set(자료구조)

  • 대상 자료구조/Iterable을 Set으로 변환
  • 다른 자료구조의 원소 중 중복을 빼고 조회할 때 set()를 이용해 Set으로 변환한다.

🍀 Dictionary로 변환하는 함수는 없다.

🍀 변경할 대상이 Dictionary 일 경우에는 key값들만 모아서 변환한다.

Iterable반복가능한 객체. 반복문(for in)을 이용해 일련의 값들을 반복적으로 각각 제공하는 객체를 말한다.대표적으로 자료구조, 문자열 등이 있다.


TODO

문제 1 ~ 7
jumsu = [100, 90, 100, 80, 70, 100, 80, 90, 95, 85] 
# 위 리스트는 학생번호 1번 ~ 10번까지 10명의 시험 점수이다. 

(1)  7번의 점수를 출력하세요 

(2)  1번부터 5번까지의 점수를 출력하세요.

(3)  4, 5, 6, 7번의 점수를 출력하세요.

(4) 짝수번째 점수를 출력하세요.

(5) 홀수번째 점수를 출력하세요.

(6) 9번의 점수를 20으로 변경하고 전체 출력하세요.

(7) 중복된 점수는 제거하고 하나씩만 나오도록 출력하세요.

문제 8 ~ 9
fruits = ["복숭아", "수박", "딸기"]

(8) fruits 리스트에 마지막 원소로 "사과", "귤"을 추가하세요.

(9) fruits 리스트에서 "복숭아"를 제거하세요

 문제 10 ~ 15
(10)본인의 이름, 나이, email주소, 취미, 결혼유무를 사전(딕셔너리)으로 생성. 
 취미는 2개 이상의 값을 넣는다..

(11) 위 딕셔너리에서 이름과 email주소를 조회해서 출력하세요.

(12) 위 딕셔너리에서 취미중 두번째 취미를 조회해서 출력하세요.

(13) 위 딕셔너리에 몸무게와 키 항목을 추가하세요.

(14) 위 딕셔너리에서 나이를 제거하세요.

(15) 위 딕셔너리에서 email 주소를 다른 값으로 변경하세요.

 

풀이)

반응형