[Python] 시퀀스 자료형 2탄 (list, tuple)

    시퀀스 자료형

    출처: 코딩도장

    시퀀스 자료형(sequence types) 란 요소들(elements)이 연속적(sequence)으로 이어진 자료형을 의미해요.
    파이썬에서는 list, tuple, range, str 을 주로 사용하고, bytes, bytearray 도 시퀀스 자료형입니다.

    이전글(링크)에 이어 "시퀀스 자료형"에 대해 알아볼까요?

     

    리스트 (list)

    출처: 끝나지 않는 프로그래밍 일기 (https://blog.hexabrain.net/)

    리스트란?

    리스트는 변수 여러개를 묶는 역할을 하는 자료형이에요.
    서로 다른 자료형들을 하나의 리스트로 저장할 수도 있어요. (리스트 안에 리스트를 저장할 수도 있어요.)

    리스트는 아래 방법으로 선언해요.
    list1 = [ 'element1', 'element2', 'element3', ... ]
    
    list2 = [1, 2, 3, "hello", ['a', 'b', 'c']]


    빈 리스트를 생성하는 것도 가능해요.

    a= []
    b= list()​

    리스트 연산하기

    리스트를 연산하는 방법은 문자열 연산과 동일해요.
    단, +연산자를 사용할 때는 주의할 점이 있어요. "같은 type 만 연결"해야한다는 점인데요.
    리스트는 여러 type의 요소를 저장할 수 있어서 헷갈릴 수 있어요. (아래 예시 참고)

    리스트 연산의 예시를 살펴볼게요.
    >>> c= [1, 2, 3, "hello", ['a', 'b', 'c']]
    >>> d=[4,5,6]
    
    # 더하기
    >>> c+d
    [1, 2, 3, 'hello', ['a', 'b', 'c'], 4, 5, 6]
    
    # 반복하기
    >>> c*2
    [1, 2, 3, 'hello', ['a', 'b', 'c'], 1, 2, 3, 'hello', ['a', 'b', 'c']]
    
    # 길이구하기
    >>> len(c)
    5
    
    # 연산 오류!!! - int 와 str 은 + 로 직접 연산 불가
    >>> c[2] + " hi"
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: unsupported operand type(s) for +: 'int' and 'str'
    # 정답
    >>> str(c[2]) + " hi"
    '3 hi'​

     

    인덱싱 & 슬라이싱

    출처: 코딩도장

    리스트도 시퀀스 자료형이기 때문에 인덱싱과 슬라이싱이 가능해요.
    앞서 살펴 본 문자열과 동일한 규칙으로 할 수 있어요.
    * 슬라이싱 규칙 - list[시작:끝:간격]

    인덱싱과 슬라이싱의 예를 살펴보죠.
    >>> a= []
    >>> b= list()
    >>> c= [1, 2, 3, "hello", ['a', 'b', 'c']]
    
    # 인덱싱
    >>> c
    [1, 2, 3, 'hello', ['a', 'b', 'c']]
    >>> c[0]
    1
    >>> c[0]+c[2]
    4
    >>> c[-1]
    ['a', 'b', 'c']
    
    # 슬라이싱
    >>> c[0:2]
    [1, 2]
    >>> c[2:4]
    [3, 'hello']
    >>> c[4:]
    [['a', 'b', 'c']]
    >>> c[3:]
    ['hello', ['a', 'b', 'c']]

     

    리스트는 "리스트를 포함할 수 있다."는 특징이 있어요.
    그렇다면 리스트안의 리스트를 인덱싱하고 슬라이싱할 수 있을까요?
    당연히 가능해요.
    # 인덱싱
    >>> c[-1][0]
    'a'
    >>> c[-1][1]
    'b'
    >>> c[-1][-1]
    'c'
    
    #슬라이싱
    >>> c[4][:2]
    ['a', 'b']​

    위의 예시를 살펴볼게요.
    "c" 라는 list 안에는 5번째 요소(index = 4 or -1)로 ['a', 'b', 'c'] 라는 list 가 있죠.
    이 list 에 해당하는 인덱스를 이용해 요소를 선택해줘요. ( c[-1] or c[4] )
    그 후 인덱싱과 슬라이싱의 방법을 적용하면 끝!! ( c[4][0] or c[-1][:2] )

    리스트 수정, 삭제

    리스트는 문자열이나 튜플과 다르게 요소를 수정하거나 삭제할 수 있어요.
    * 이전 글에서 살펴 본 것처럼 문자열은 출력만 수정되고 원본은 변하지 않았죠.

    방법은 간단해요.
    수정은 index 로, 삭제는 del 함수로!!
    예시로 알아보죠.
    >>> c
    [1, 2, 3, 'hello', ['a', 'b', 'c']]
    
    # 값 수정하기
    >>> c[2] = 10
    >>> c
    [1, 2, 10, 'hello', ['a', 'b', 'c']]
    
    # 삭제하기
    >>> del c[1]
    >>> c
    [1, 10, 'hello', ['a', 'b', 'c']]
    
    # 한번에 여러 요소 삭제 - 시작은 포함 // 끝은 미포함
    >>> d=[4,5,6,7,8,9,0]
    >>> del d[1:4]
    >>> d
    [4, 8, 9, 0]
    
    >>> del c[1:]
    >>> c
    [1]​

    리스트 관련 함수들

    이번에는 리스트 관련 함수들을 소개할게요.
    문자열과 마찬가지로 리스트에서 사용할 수 있는 내장함수들이 있어요.

    사용 방법은 예시를 보면 쉽게 이해될 거에요.
    # .append() - 요소 추가 (맨 끝에 위치)
    >>> d=[4, 8, 9, 0]
    >>> d.append([10,11])
    >>> d
    [4, 8, 9, 0, [10, 11]]
    # .insert() - 요소 삽입 (위치 지정)
    >>> d.insert(1, 23)
    >>> d
    [0, 23, 4, 8, 9, [10, 11]]
    
    # .remove() - 요소 제거 (중복된 요소는 앞의 요소 부터 제거)
    >>> d.remove(23)             # 인덱스가 아닌 요소를 지정
    >>> d
    [0, 4, 8, 9, [10, 11]]
    # pop() - 요소 끄집어 내기 (출력 후 제거)
    >>> d.pop(2)                 # 인덱스를 지정한다
    8
    >>> d
    [0, 4, 9, [10, 11], 4]
    >>> d.pop()                  # 인덱스가 없을 경우 끝 요소를 끄집어 낸다
    4
    >>> d
    [0, 4, 9, [10, 11]]
    
    # .sort() - 리스트 정렬 (숫자, 알파벳(대문자 우선))
    >>> e=[3,5,2,6,8,0]
    >>> e.sort()
    >>> e
    [0, 2, 3, 5, 6, 8]
    >>> f=['a', 'c', 'B', 'b']
    >>> f.sort()
    >>> f
    ['B', 'a', 'b', 'c']
    
    #위치 반환
    >>> f.index('a')
    1
    
    # .count() - 특정 요소의 수 세기
    >>> d.append(4)
    >>> d.append(4)
    >>> d.append(4)
    >>> d.append(4)
    >>> d.append(4)
    >>> d
    [0, 4, 9, [10, 11], 4, 4, 4, 4, 4]
    >>> d.count(4)
    6
    
    # .extend() - 리스트 확장 
    >>> a=[1,2,3]
    >>> b=[4,5]
    >>> a.extend([6,7])            # 한번에 여러 요소 추가하기
    >>> a
    [1, 2, 3, 6, 7]
    >>> a.extend(b)                # 다른 리스트의 요소들을 요소로 추가하기
    >>> a
    [1, 2, 3, 6, 7, 4, 5]​

    튜플(tuple)

    출처: 조코딩 Youtube

    튜플이란?

    튜플은 "셀 수 있는 수량의 순서있는 열거" 라는 의미를 가지고 있어요.
    튜플은 몇 가지를 제외하면 리스트와 거의 비슷해요.

    우선 튜플의 선언부터 알아보죠.
    >>> t1 = ()
    >>> t2 = (1,)
    >>> t3 = (1, 2, 'a', 'b')
    >>> t1
    ()
    >>> t2
    (1,)
    >>> t3
    (1, 2, 'a', 'b')​

    튜플과 리스트

    그럼 다른 점을 알아볼까요?

    • 튜플은 ( ) 를 이용해서 정의한다. ( 리스트는 [ ] )
    • 튜플은 요소를 삭제, 수정, 추가할 수 없다. ( 리스트는 삭제, 수정, 추가 할 수 있다. )
    튜플의 요소를 리스트처럼 다루면 오류가 발생해요.
    요소 삭제
    >>> del t3[0]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'tuple' object doesn't support item deletion​

    요소 수정
    >>> t3[0] = 'c'
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'tuple' object does not support item assignment​

    요소 추가
    >>> t.append((4))
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'tuple' object has no attribute 'append'
    
    >>> t.insert(1, 3)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'tuple' object has no attribute 'insert'

    튜플 다루기

    앞서 언급한 것처럼 튜플은 변경, 삭제가 안돼요.
    그렇다면 튜플을 어떻게 활용할 수 있을까요?
    튜플도 시퀀스 자료형이죠!! 그래서 인덱싱, 슬라이싱, 연산 등을 할 수 있어요.

    예시를 볼게요.
    # 인덱싱
    >>> t3
    (1, 2, 'a', 'b')
    >>> t3[0]
    1
    >>> t3[3]
    'b'
    
    # 슬라이싱
    >>> t3[1::2]
    (2, 'b')
    
    # 더하기
    >>> t2
    (1,)
    >>> t3
    (1, 2, 'a', 'b')
    >>> t2+t3
    (1, 1, 2, 'a', 'b')
    
    # 반복하기
    >>> t3*2
    (1, 2, 'a', 'b', 1, 2, 'a', 'b')
    
    # 길이 구하기
    >>> len(t3)
    4
    >>> len(t3*3)
    12​

    여기까지 이전글(링크)에 이어 "시퀀스 자료형"에 대해 알아봤어요.
    글이 도움이 되셨다면 공감 버튼 눌러주세요. 😊

     

    댓글

    Designed by JB FACTORY