ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬 프로그래밍(python) 3 - 변수값의 형태 -2(리스트, 튜플, 딕셔너리, boolean, set)
    데이터분석/파이썬 2021. 11. 13. 02:39
    반응형

    https://kbkb456.tistory.com/63

     

    데이터 분석을 위한 파이썬(2) - 변수값의 형태 - 1(숫자형과 문자열)

    파이썬의 변수를 다룸에 있어서 변수값의 형태는 매우 중요합니다. 이런 형태를 잘 이해하고 다루는 것에 따라서 코딩이 정말 편리해지기 때문입니다. 변수값의 형태는 크게 1. 숫자형 2. 문자열

    kbkb456.tistory.com

    저번 시간에 이어서 변숫값의 형태에 대 해어 이어가도록 해보겠습니다.

     

    3. 리스트(list)

    - 리스트는 원소의 모음으로써 대괄호로 표현된 일종의 배열(array)이라고 보시면 됩니다.

    - []로 둘러 싸서 표현하며 값의 생성, 삭제, 수정 등이 가능합니다.

    - 서로 다른 타입의 원소도 안에 넣는 것이 가능합니다.

    - 리스트 끼리 안에 리스트를 또 넣는 것도 가능합니다.

     

    리스트를 선언하는 방법

    # 리스트
    # 1. 데이터의 모음
    # 2. []로 둘러싸서 표현
    # 3. 값의 생성, 삭제, 수정이 가능
    
    # 리스트 생성
    list1 = [1, 2, 3, 4, 5]
    list2 = ["a",1,3,"b",4,"c"]
    
    LL = [4, 5, 6, [1, '가', '나']]

     

    리스트 인덱스 & 슬라이스

    문자열과 마찬가지로 리스트도 각 위치별로 위치를 가지고 있습니다. 맨 앞이 0으로 시작해서 순차적으로 1씩 상승하게 되는 구조를 가집니다.

    리스트의 인덱스 번호

     

    리스트[원하는 위치의 인덱스 숫자]

    이런식으로 하게 되면 원하는 문자를 가져오게 될 수 있게 됩니다. 여기서는 a라는 문자열에 "일이삼사오"가 있으니 삼 자리인 2인 덱스를 불러오면 되겠군요! -> a [2]

    그렇다면 해당 리스트에서 여러개의 연속된 원소를 가져와야 한다면 어떻게 할까요?

    리스트[시작 인덱스 : (끝 인덱스 + 1)]

    이런식으로 하게 되면 문자열에서 원하는 연속된 문자들을 가져오게 될 수 있게 됩니다. 만약 b라는 변수에 "12345"라는 문자열이 선언되어있고 거기서 "234"만 가져와야 한다면? b [1:4] -> 4가 있는 위치의 인덱스는 3이지만 4까지 불러와줘야 3까지 가져오게 됩니다. 

     

    리스트[-1]

    가장 끝에 원소를 가져옵니다.

     

    리스트[내부 리스트 인덱스][인덱스]

    해당 리스트 안에 또 리스트가 있을때 그 안에 있는 원소도 가져올 수 있습니다.

    # 문자열이랑 기본원리는 비슷함
    
    # 리스트 인덱스
    print(list1[1])
    
    # # 리스트 슬라이싱
    print(list1[1:4])
    print(list1[1:])
    
    # 리스트 안에있는 리스트 슬라이싱
    print(LL[-1])
    
    # LL 마지막 원소에 있는 리스트에서 1~2번 인덱스에 있는 원소들 반환
    print(LL[-1][1:3])

    코드 실행 결과

    인덱스, 슬라이싱 코드 실행결과

    리스트의 연산과 리스트 값 수정

    리스트도 연산과 수정이 가능합니다.

    #리스트 연산
    print(list1 + list2)
    print(list1 * 2)
    
    #리스트의 길이를 반환
    print(len(list2))
    
    #리스트 값 수정
    number_list = [1, 2, 3, 4, 5]
    print(number_list)
    
    #0번 인덱스에 있는 값 수정
    number_list[0] = 0
    print(number_list)

    - + 를 하면 두개의 리스트가 서로 연결

    - * 를 하면 한 리스트가 뒤에 숫자만큼 반복

    - len()은 리스트의 길이를 반환

    - 리스트 인덱스 자리에 새로운 값을 넣으면 해당 인덱스 자리의 값이 변함

     

    코드 실행 결과

    파이썬 리스트 연산 코드 실행 결과

     

    리스트 관련 함수

    함수 이름 문법 반환
    append 리스트.append(원소) 기존 리스트에 맨 뒤에 원소를 넣어서반환
    remove 리스트.remove(원소) 해당 원소에 대한 값을 리스트에서 제거
    insert 리스트.insert(인덱스,원소) 해당 인덱스에 원소값 삽입
    count 리스트.count(원소) 해당 원소값의 수를 반환
    pop 리스트.pop(인덱스) 해당 리스트 인덱스의 있는 값을 반환후에 리스트에서 제거
    extend 리스트.extend([리스트]) 해당 리스트 맨 뒤에 리스트값 추가
    reverse 리스트.reverse() 리스트 순서를 뒤집음
    sort 리스트.sort() 리스트에서 값이 낮은 순서대로 정렬함
    sort 리스트.sort(reverse=True) 리스트에서 값이 높은 순서대로 정렬함
    max max(리스트) 해당 리스트에서 가장 큰값을 반환
    min min(리스트) 해당 리스트에서 가장 작은값 반환
    index 리스트.index(원소) 해당 리스트 안에 원소 인덱스 위치를 반환

    예제 코드

    #리스트에 값 추가하기
    q = []
    print(q)
    
    q.append(3)
    print(q)
    
    q.remove(3)
    print(q)
    
    q.insert(0,3)
    print(q)
    
    print(q.count(3))
    
    print(q.pop(0), q)
    
    q.extend([3,4])
    print(q)
    
    a = [2,1,8,10,5,4,3]
    a.reverse()
    print(a)
    
    a.sort()
    print(a)
    
    a.sort(reverse=True)
    print(a)
    
    print(max(list1))
    print(min(list1))
    print(list1.index(5))

    실행결과

    파이썬 리스트 함수 실행 결과

    4. 튜플(tuple)

    - 튜플도 리스트와 마찬가지로 데이터의 배열이라고 보면 됩니다.

    - 튜플은 리스트와 다르게 ()로 둘러싸서 표현합니다.

    - 값의 생성, 삭제, 수정이 불가능합니다.

    # 튜플
    # 1. 데이터의 모음
    # 2. ()로 둘러싸서 표현
    # 3. 값의 생성, 삭제, 수정 불가능
    
    t = (1,2,3)
    t2 = (1,2,(1,2,3))
    
    # 튜플은 안에 삭제가 안됨
    del t[0]

    안에 원소를 삭제하려면 오류가 뜬다.

    튜플의 연산과 인덱스, 슬라이싱

    리스트와 동일해서 코드만 올리도록 하겠습니다.

    #튜플 연산
    print(t+t)
    print(t*3)
    print(len(t))
    
    # 튜플 인덱스
    print(t[1])
    
    # 튜플 슬라이싱
    print(t[1:3])
    print(t[1:])
    
    # 튜플 안에 있는 튜플 슬라이싱
    print(t2[-1])
    print(t2[-1][1:3])

    실행 결과

    튜플 인덱스 코드 실행결과

    튜플 관련 함수

    튜플은 변경이 불가능한 특징을 가지고 있기 때문에 append나 extend나 상태를 변환시키는 함수를 활용할 수 없습니다.

    함수 이름 문법 반환
    max max(튜플) 해당 튜플에서 가장 큰 값을 반환
    min min(튜플) 해당 튜플에서 가장 작은 값을 반환
    index 튜플.index(원소) 해당 튜플안에 원소의 인덱스 값을 반환
    print(max(t))
    print(min(t))
    print(t.index(1))

     

    실행 결과

    튜플 함수 실행 결과

    5. 딕셔너리

    - 딕셔너리는 튜플과 리스트처럼 순차적인 값을 가지는 데이터의 모음이 아니라 key와 value로 된 대응 관계를 나타내는 자료형입니다. 그래서 값을 구할 때 index를 활용하지 않고 key를 통해 value를 얻습니다.

     

    데이터 구조: {"키":"벨류"}

    ex) "phone" : "010-1234-1234" -> 해당 키값은 phone이고 value값은 010-1234-1234입니다.

    # 딕셔너리
    # 1. key와 value로 된 대응 관계를 나타내는 자료형
    # 2. 리스트나 튜플처럼 순차적인 값으로 value를 구하지 않고 Key를 통해 Value를 얻는 방식
    
    
    dic = {'shop_name':'치킨치킨', 
           'phone':'010-1234-1234', 
           'price': 23000, 
           "chicken_list" : ["양념치킨", "후라이드치킨"]}

    각각의 값 리스트를 보는 법

    아래의 코드를 통해서 딕셔너리가 가지는 키나 벨류 값을 확인할 수 있습니다.

    #키 값을 보는 함수
    print(dic.keys())
    
    #벨류값을 보는 함수
    print(dic.values())
    
    #키, 벨류를 페어로 얻는 함수
    print(dic.items())

    실행결과

    딕셔너리 key value 함수 실행결과

    특정한 key값의 value를 가져오고 싶다면?

    딕셔너리를 다루면서 특정한 키값의 벨류만 가져와야 할 때가 있습니다. 이럴 땐 아래의 코드와 같은 방식으로 가져오시면 됩니다.

    #이런식으로 키값으로 value를 가져옴
    print(dic['shop_name'])
    print(dic.get('phone'))

    실행결과

    딕셔너리 벨류값 가져오기 예제

    딕셔너리에 값 추가하기

    딕셔너리에 새로운 키 벨류 값을 추가하고 싶다면 아래의 코드를 통해서 추가가 가능합니다.

    딕셔너리[키] = 벨류

     

    #기존 딕셔너리 출력
    print(dic)
    
    #딕셔너리에 값추가하기
    dic['manager'] = '요리사'
    print(dic)

    실행결과

    딕셔너리에 원소추가하기 예제

    6. boolean과 논리 비교 연산자

    boolean타입은 참이냐 거짓이냐의 명제에 따른 리턴 값으로 True/False를 가집니다.

    이때 보통 비교, 논리 연산자와 같이 사용됩니다.

     

    예를 들어 3!= 2는 3과 2는 같지 않다는 명제인데요. 이건 참이니 return값은 True일 것입니다. 여기서 True값을 boolean값으로 보시면 되겠습니다.

     

    파이썬 비교 연산자

    기호 기능 문법
    == 같다 a==b
    != 같지않다. a != b
    > 왼쪽이 오른쪽보다 크다 a > b
    < 오른쪽이 왼쪽보다 크다 a < b
    >= 왼쪽이 오른쪽보다 크거나 같다. a >= b
    <= 오른쪽이 왼쪽보다 크거나 같다. a <= b

    파이썬 논리 연산자

    기호 기능 문법
    and 조건이 둘다 참이여야한다. (조건1) and (조건2)
    or 조건이 둘중 하나만 참이여도 된다. (조건1) or (조건2)
    not 괄호안에 조건이 거짓이여야 한다. not(조건1 and 조건2)
    # 참 거짓을 나타내는 값 true/false
    
    #같다 ==
    print(3==3)
    
    #같지 않다 !=
    print(3!=3)
    
    # 크다: > , 크거나 같다: >=
    print(3 > 3, 3 >= 3)
    
    # 작다: < , 작거나 같다: <=
    print(3 < 3, 3 <= 3)
    
    #둘다 참이여야함
    print((3 != 2) and (2 == 2))
    
    #둘중 하나만 참이여도 됨
    print((3 != 2) or (2 != 2))
    
    #괄호 안에 조건이 참이 아니여야 함
    print(not((3 != 2) and (2 == 2)))

    실행결과

    boolean 실행 결과

     

    7. 집합(set)

    집합은 집합에 관련된 것을 쉽게 처리하기 위해 만든 자료형으로 두 가지 특징을 가지고 있습니다.

     

    1. 중복을 허용하지 않는다.

    2. 순서가 존재하지 않는다.

     

    # 집합: 집합에 관련된 것을 쉽게 처리하기 위해 만든 자료형
    # 1. 중복을 허용하지 않는다.
    # 2. 순서가 없다 
    
    q1 = set([1,2,3,1,2,5,4,6])
    q2 = set([7,8,3,9,10,5,4,6])
    print(q1)
    print(q2)

    실행결과

    print 해보니 중복이 제거되었다.

    각각 집합 별 연산

    교집합(interscetion): 두 집합 사이에 공통된 원소만 반환

    합집합(union): 두 집합사이에 모든 원소를 반환(중복 시 중복은 제거됨)

    차집합(difference): a-b일 때 a집합에서 b집합에 있는 원소가 제거돼서 나옴

     

    #교집합
    print(q1 & q2)
    print(q1.intersection(q2))
    
    #합집합
    print(q1 | q2)
    print(q1.union(q2))
    
    #차집합
    print(q1 - q2)
    print(q1.difference(q2))

     

    실행결과

    각 집합 연산 코드 실행결과

    집합에서 값을 추가 제거하는 법

    # 값 추가
    q1.add(99)
    print(q1)
    
    #값 제거
    q1.remove(99)
    print(q1)
    
    #값 맨 뒤에 추가
    q1.update([99,88,77])
    print(q1)

    실행 결과

    집합에 값을 추가/제거 하는 법

     

    여기까지 파이썬의 자료 형태에 대해서 알아봤습니다. 다음 시간에는 if나 for문을 통한 흐름 제어를 어떻게 하는지에 대해서 알아보도록 하겠습니다.

     

    관련 코드

    https://colab.research.google.com/drive/173FdHs_NNWEm9c4vbAzkbtTsUPSeMPY1?usp=sharing 

     

    파이썬 포스팅코드.ipynb

    Colaboratory notebook

    colab.research.google.com

    반응형

    댓글

Designed by Tistory.