NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    Python 5. 파이썬 코딩 - 배열, 목록, 튜플(Array, List and Tuple)

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 오늘은 정말정말 중요한 배열에 대해 알아보도록 하겠습니다. 다른 언어들은 배열과 목록외에도 여러가지 리스트 자료형들이 존재합니다. 하지만, 파이썬은 그냥 목록(List) 하나로 다 처리할 수 있습니다. 쉽죠^^; 참고로, 다른 언어들도 리스트에서 파생된 자료형이라 비슷하다고 볼수도 있습니다. 학습을 위해 Visual Studio Code(vscode)를 실행하고, 새로운 파일을 하나 추가 해주세요.

    cJf8xUf.gif

     

     

    파이썬에서 히어로(Hero) 집단을 아래와 같이 만들 수 있습니다.

    heros = ['Ironman', 'Betman', 'Spiderman', 'Antman', 'Aquaman']

     

    대부분의 언어(C, C#, Java, Python, JavaScript...)들은 배열에 원소(Ironman, Betman...)를 담을 수 있습니다. 각각의 원소들은 순서(Order)가 존재하고 위치(Index)를 통해 접근할 수 있습니다. 파이썬은 리스트와 튜플이라는 2가지 타입이 존재합니다. 다른 언어에서 튜플은 용도는 다른데 사용법은 동일합니다. 아래 글은 가볍게 한번 읽어보세요~

    [ C# 튜플을 사용하여 성능을 업그레이드하기 ]

     

    히어로 집단의 맴버가 몇명인지 물어볼까요? len함수를 사용하면 리스트의 원소(Element) 갯수를 알 수 있습니다. 대부분의 언어는 length 풀네임을 사용합니다.

    ※ 원소(Element): 물질을 이루는 기본적인 요소를 말하며, 영화나 게임에서 자주 등장하는 어떤 힘 또는 근원적인 무언가를 말합니다.

    wypIGBR.png

     

     

    len함수에 리스트 변수를 넘기면 리스트가 가지고 있는 원소의 갯수를 알려줍니다. 리스트는 대괄호([])로 원소들을 묶고, 각각의 원소들은 콤마(,)로 구분합니다. 여기서, 스파이더맨을 가져와볼까요? heros 리스트에 스파이더맨 위치 값(인덱스, Index)을 입력해줍니다. 그러면, 해당 위치에 있는 원소를 가져올 수 있습니다.

    ※ 리스트에서 원소를 탐색할 때 주의할점! 리스트에서 첫번째 원소의 위치는 0입니다. 이는 모든 언어가 같습니다!

    YdptWwO.png

     

     

    자~ 여기서 베트맨과 아쿠아맨이 마블 히어로들과 문제가 발생했다고 생각 해봅시다. 그래서, 히어로 집단에서 탈퇴하기를 원하는데요. 이런 경우에는 remove 함수를 사용합니다. 아래 그림과 같이 DC 히어로인 베트맨과 아쿠아맨을 remove로 삭제 했습니다. 프린트로 출력해보면 마블 히어로들만 남아있는걸 확인할 수 있습니다.

    CDwzwpX.png

     

     

    인덱스로 삭제하고 싶으면 del 함수를 사용할 수 있습니다. 히어로 집단의 첫번째 원소를 제거했기 때문에 두번째는 인덱스가 3이됩니다.

    heros = ['Ironman', 'Betman', 'Spiderman', 'Antman', 'Aquaman']
    print(len(heros))
    print(heros[2])
    # heros.remove('Betman')
    # heros.remove('Aquaman')
    del heros[1]
    del heros[3]
    print(heros)
    
    #result
    ['Ironman', 'Spiderman', 'Antman']

     

    del 함수는 범위 삭제도 가능합니다. 1(0이 첫번째니까 1은 두번째 원소) 원소부터 4(인덱스 4의 Aquman원소 앞을 의미)까지 모든 항목을 삭제합니다. del의 범위는 "1보다 크거나 같고, 4보다 작은 원소들"과 같이 처리됩니다. 그래서, 결과는 아이언맨과 아쿠아맨이 남아있게 됩니다.

    heros = ['Ironman', 'Betman', 'Spiderman', 'Antman', 'Aquaman']
    del heros[1:4]
    print(heros)
    
    #result
    ['Ironman', 'Aquaman']

     

    마지막으로 pop 함수를 이용하면 인덱스에 위치한 요소를 꺼내올 수 있습니다. del 함수와 차이점은 제거하느냐와 꺼내오느냐의 차이입니다. del은 리스트에서 원소를 제거하지만, pop 함수는 리스트에서 인덱스에 위치한 원소를 꺼내옵니다. 꺼내왔기 때문에 다른데 담아둘 변수가 필요합니다. 만약, 어디에도 담지 않는다면 del과 동일합니다^^;

    heros = ['Ironman', 'Betman', 'Spiderman', 'Antman', 'Aquaman']
    secessionMember = heros.pop(1)
    print(secessionMember)
    print(heros)
    
    #result
    secessionMember = Betman
    heros = ['Ironman', 'Spiderman', 'Antman', 'Aquaman']

     

    이번에는 베트맨이 히어로 집단에서 탈퇴하고, 새로운 DC의 영웅 슈퍼맨이 가입했다고 생각 해봅시다. 리스트에 새 항목을 추가하려면 append 함수를 사용합니다.

    heros = ['Ironman', 'Betman', 'Spiderman', 'Antman', 'Aquaman']
    secessionMember = heros.pop(1)
    print(secessionMember)
    heros.append('Superman')
    print(heros)
    
    #result
    secessionMember = Betman
    heros = ['Ironman', 'Spiderman', 'Antman', 'Aquaman', 'Superman']

     

    슈퍼맨을 베트맨이 있던 위치에 추가하고 싶으면 insert를 사용해야 합니다. insert 함수는 첫번째 인자(Argument)로 위치를 받습니다. 그리고, 두번째 인자에 원소를 넣어주면 첫번째 인자로 받은 인덱스에 원소를 위치시키게 됩니다. 아래 결과를 보면, 베트맨 위치에 슈퍼맨이 추가된것을 확인할 수 있습니다.

    heros = ['Ironman', 'Betman', 'Spiderman', 'Antman', 'Aquaman']
    secessionMember = heros.pop(1)
    print(secessionMember)
    heros.insert(1, 'Superman')
    print(heros)
    
    #result
    secessionMember = Betman
    heros = ['Ironman', 'Superman', 'Spiderman', 'Antman', 'Aquaman']

     

    마지막으로 extend 함수를 사용하면 리스트와 리스트를 합쳐줄 수 있습니다. 또한, 아래 예제와 같이 []를 사용하면 빈(Empty) 리스트를 만들 수 있습니다. 참고로, marvel.extend(dc)와 같이 사용하면, marvel에 dc 맴버들이 추가됩니다.

    heros = []
    marvel = ['Ironman', 'Spiderman', 'Antman']
    dc = ['Superman', 'Betman', 'Aquaman']
    heros.extend(marvel)
    heros.extend(dc)
    print(heros)
    
    #result
    ['Ironman', 'Spiderman', 'Antman', 'Superman', 'Betman', 'Aquaman']

     

    파이썬은 리스트를 더하기(+)로 연결할수도 있습니다. 다른 언어에서는 볼 수 없는 파이썬만의 오퍼레이션입니다. 자바스크립트에서도 이렇게 안되었던거 같은데... 기억이 정확하지는 않네요. 리스트를 더하기로 연결할 때는 A와 B가 동일한 형식(리스트, 튜플)이어야 합니다. 리스트와 튜플이 같은 목록형이라고 해도 더하기로 연산할 수 없습니다.

    marvel = ['Ironman', 'Spiderman', 'Antman']
    dc = ['Superman', 'Betman', 'Aquaman']
    heros = marvel + dc
    print(heros)
    
    # result
    ['Ironman', 'Spiderman', 'Antman', 'Superman', 'Betman', 'Aquaman']

     

    리스트는 += 연산자도 사용할 수 있습니다. 이것도 파이썬만의 고유한 기능중에 하나입니다.

    marvel = ['Ironman', 'Spiderman', 'Antman']
    marvel += marvel
    print(marvel)
    
    #result
    ['Ironman', 'Spiderman', 'Antman', 'Ironman', 'Spiderman', 'Antman']

     

    튜플은 대괄호([])가 아닌 괄호를 사용합니다. 아래 예제를 보면 리스트와 다를게 없어 보입니다.

    marvel = ('Ironman', 'Spiderman', 'Antman')
    print(marvel[1])
    
    #result
    Spiderman

     

    튜플은 한번 정의하면 수정할 수 없는 특성이 있습니다. 이는 다른 언어들의 튜플과 동일합니다. 리스트와 다르게 append, del, pop... 와 같이 원소를 추가하거나 삭제할 수 없습니다. 참고로, 튜플은 원소가 하나만 있으면 일반적인 함수의 인자와 구분이 되지 않는 문제가 있습니다. 물론, 코드를 유심히 살펴보고 분석하면 알 수 있겠지만 말이죠. 그래서, 튜플을 작성할 때 아래와 같이 콤마를 추가해서 튜플임을 명시할 수 있습니다. 튜플은 원소를 교체하거나 추가할 수 없기 때문에 새로운 튜플을 생성하는 방법을 사용합니다.

    marvel = ('Ironman', 'Spiderman', 'Superman', 'Betman')
    marvel = ('Antman',) + marvel[1:]
    print(marvel)
    
    #result
    ('Antman', 'Spiderman', 'Superman', 'Betman')

     

    리스트 내부에 리스트를 추가할 수 있습니다. 보통 2차원 배열이라고 부르는데요. 사용법은 동일합니다.

    marvel = ['Ironman', 'Spiderman']
    dc = ['Superman', 'Betman', marvel]
    print(dc)
    
    #result
    ['Superman', 'Betman', ['Ironman', 'Spiderman']]

     

    튜플도 동일하게 사용할 수 있습니다.

    marvel = ['Ironman', 'Spiderman']
    dc = ('Superman', 'Betman', marvel)
    print(dc)
    
    #result
    ('Superman', 'Betman', ['Ironman', 'Spiderman'])

     

    목록은 여러가지 다양한 산술 함수를 사용할 수 있습니다.

    list = [1,2,3,4,5,6,7,8,9,10]
    print(sum(list)) #배열의 값을 모두 더한 값을 반환
    print(max(list)) #배열의 최대 값을 반환
    print(min(list)) #배열의 최소 값을 반환
    
    #result
    55
    10
    1
    
    list = [True, True, True]
    print(all(list)) # 배열이 모두 참(True)이면 True를 반환
    
    #result
    True
    
    list = [True, False, True]
    print(all(list))
    
    #result
    False

     

    리스트와 튜플에 대해서는 더 설명해야 할게 많은데요. 기본적으로 많이 사용하는 기능들에 대해서만 알아보고 넘어가야겠네요. 잘 사용되지 않는 기능이라도 앞으로 예제를 진행하면서 한번쯤은 다루게 될겁니다. 그때 간단한 예제와 함께 어떻게 동작하는지 알아보도록 할께요. 그럼 다음 시간에 봅시다!

     

    이 글이 도움이 되셨다면~ 커피 한잔이라도 후원 부탁드립니다^^

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.