ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 4. (2) 파이썬 자료형 리스트
    파이썬(Python) 강의 2019. 2. 7. 15:46

    들어가기 전에

    이 포스트는 여러분이 파이썬을 설치했고 각자 원하는 IDE를 이용해 파이썬을 개발한다고 가정한다. 대화형(Interactive) 터미널을 사용해도 상관 없다. 혹시 파이썬을 설치하지 않았다면  1.파이썬 설치 및 개발환경 설정 이 포스트에서 파이썬과 파이썬 개발환경을 먼저 셋업하길 바란다. 앞서 말했듯이 반드시 실습 해 보길 바라고 30분 이상 소요하지 말라. 또한 이전 포스트인 3. (1) 파이썬 자료형 문자열에서 스트링(문자열) 그리고 4. (1) 파이썬 자료형 리스트 대해 먼저 학습 한 후 이 포스트를 진행해라.

    • 숫자(Numbers) : 12, 24.3, 3+2j, .. (2.파이썬 자료형 숫자)

    • 문자(Strings) : "hello, "world" (3. (1) 파이썬 자료형 문자열3.(2) 파이썬 자료형 문자열)

    • 리스트(Lists) : [1, 3, [3, 'hey'], 4] <- 이전 포스트: 4. (1) 파이썬 자료형 리스트)

    • 딕셔너리(Dictionaries) : { 'name': 'fsoftwareengineer', 'age' : 17}

    • 튜플(Tuples) : (1, 'a', 4, 'c')

    • 파일(Files) : f = open('filename', 'r')

    • 셋(Sets) (집합) : { 1, 4, 5 }

    • 다른 타입들 : Boolean (True/Faluse), types, None, etc

    • 프로그래밍 유닛 타입(Programming unit types) : 함수(Functions), 모듈(Modules), 클래스(Classes)

    • 구현 레벨 타입(Implementational-level types) : 예외(Exception) 등등..

    목표

    • 길이 (len)
    • 삽입 (Insertion)
    • 수정 (Update)
    • 삭제 (Deletion)
    • 검색/반복 (Retrieval/Iteration)
    • 정렬

    길이

     리스트의 길이는 len함수를 이용해 구할 수 있다.

    fruitList = ["apple", "banana", "orange", "mango"]
    length = len(fruitList)
    print(length) 4

    삽입 (Insertion)

     '+' 오퍼레이션을 이용해 리스트 합치기

    + 오퍼레이션을 이용해 두 리스트를 하나로 합칠 수 있다. 

    fruitList = ["apple", "banana", "orange", "mango"]
    newList = fruitList + ["something"]
    print(newList) ['apple', 'banana', 'orange', 'mango', 'something']

    위에선 하나로 합친 리스트를 newList에 넣었다. 그렇다면 하나로 합친 리스트를 다시 fruitList에 넣고 싶다면 어떻게 할까?

    fruitList = ["apple", "banana", "orange", "mango"]
    fruitList = fruitList + ["something"]
    print(fruitList) ['apple', 'banana', 'orange', 'mango', 'something']

    extend 함수를 이용해 리스트 합치기

    +연산자 대신 extend함수를 이용해 리스트를 합칠 수 있다.

    fruitList = ["apple", "banana", "orange", "mango"]
    fruitList.extend(["something", "else"])
    print(fruitList) ['apple', 'banana', 'orange', 'mango', 'something', 'else']

    그렇다면 + 연산자와 extend 함수의 차이점은 무엇인가? 다음을 확인 해 보자.

    fruitList = ["apple", "banana", "orange", "mango"]
    fruitList + ["something", "else"]
    print("fruitList + ['something', 'else'] = ", fruitList)
    fruitList.extend(["something", "else"])
    print("fruitList.extend(['something', 'else']) = ", fruitList) fruitList + ['something', 'else'] = ['apple', 'banana', 'orange', 'mango'] fruitList.extend(['something', 'else']) = ['apple', 'banana', 'orange', 'mango', 'something', 'else']

    첫번째 fruitList는 + 연산자를 사용해 리스트 두개를 합쳐 주었지만 결과가 fruitList에 반영되지 않았다. 즉, + 연산자를 이용하면 파이썬이 두 리스트를 합쳐 새 리스트를 만들어 준다는 뜻이다. 그러니 fruitList는 변경되지 않은 것이다. 따라서 새로 만들어진 리스트를 사용하기 위해서는 다른 변수에 저장해야 한다. 반면 extend는 fruitList 내부에 리스트를 하나 하나 추가하기 때문에 fruitList 내부에 아이템이 추가 된 것을 확인 할 수 있다.

    *이렇게 내부 내용 자체가 바뀌는 것을 in-place라고 한다,

    append 함수를 이용해 하나의 아이템만 삽입하기

    추가 해야 할 아이템이 하나 뿐이라면 append함수를 이용해 삽입 할 수 있다.

    fruitList = ["apple", "banana", "orange", "mango"]
    fruitList.append("something")
    print(fruitList) ['apple', 'banana', 'orange', 'mango', 'something']

    insert 함수를 이용해 하나의 아이템을 원하는 자리에 삽입하기

    여러분이 어디에 아이템을 넣고 싶은 지 알고 있다면 그 자리에 아이템을 넣을 수 있다.

    fruitList = ["apple", "banana", "orange", "mango"]
    fruitList.insert(1, "SOMETHING")
    print(fruitList) ['apple', 'SOMETHING', 'banana', 'orange', 'mango']

    "SOMETHING"이 1번 인덱스로 삽입 된 것을 확인 할 수 있다.

    수정 (Update)

     수정은 간단하다. 수정하고자 하는 아이템을 인덱스로 가져와 원하는 값을 할당 하면 된다. 예제를 보자.

    fruitList = ["apple", "banana", "orange", "mango"]
    fruitList[1] = 333
    print(fruitList) ['apple', 333, 'orange', 'mango']

    1번 인덱스의 값이 333 으로 변경 된 것을 확인 할 수 있다.

    삭제 (Deletion)

    del 을 이용한 삭제

    del 오퍼레이션을 이용해 리스트의 한 항목을 삭제 할 수 있다.

    fruitList = ["apple", "banana", "orange", "mango"]
    del fruitList[0]
    print(fruitList) ['banana', 'orange', 'mango']

    del 오퍼레이션도 마찬가지로 in-place오퍼레이션임을 확인 할 수 있다.

    remove 함수를 이용한 삭제

    remove함수를 이용하면 삭제하고 싶은 아이템의 인덱스를 몰라도 삭제 할 수 있다. 

    fruitList = ["apple", "banana", "orange", "mango"]
    fruitList.remove("apple")
    print(fruitList) ['banana', 'orange', 'mango']

    슬라이싱을 이용한 삭제

    슬라이싱을 이용한 삭제는 온전한 삭제 오퍼레이션이 아니다. 왜냐하면 이것은 단지 슬라이스된 리스트를 같은 변수에 재 할당 하는 것 이기 때문이다.

    fruitList = ["apple", "banana", "orange", "mango"]
    newList = fruitList[1:3]
    print(newList)
    print(fruitList) ['banana', 'orange'] ['apple', 'banana', 'orange', 'mango']

    newList에 슬라이싱 된 리스트를 할당 하는 대신 fruitList에 할당하도록 하자.

    fruitList = ["apple", "banana", "orange", "mango"]
    fruitList = fruitList[1:3]
    print(fruitList) ['banana', 'orange']

    여러분은 위의 예제에서 4개의 아이템이 들어있는 리스트는 버려지고 새로 만들어진 ['banana', 'orange']리스트가 fruitList에 할당 된 것을 볼 수 있다. 

    검색/반복 (retrieval/Iteration)

    우리는 지금까지 우리가 내용을 확인 할 수 있는 리스트를 가지고 삽입, 수정, 삭제를 해 보았다. 하지만 실제 세계에서는 리스트 안에 뭐가 있는지 모를 때가 많다. 그럴 때 리스트 안에 있는 내용을 확인하고 그 내용물 중 원하는 아이템을 찾기 위해서는 반복문이 필요하다.

    fruitList = ["apple", "banana", "orange", "mango"]
    for x in fruitList:
    print(x) apple banana orange mango

    위의 구문은 x에 차례차례 fruitList의 아이템을 x에 할당하고 그 x를 프린트 하라는 뜻이다. 즉

    첫번째 반복에서는 x = fruitList[0] 따라서 apple을 출력.

    두번째 반복에서는 x = fruitList[1] 따라서 banana를 출력.

    세번째 반복에서는 x = fruitList[2] 따라서 orange를 출력.

    네번째 반복에서는 x = fruitList[3] 따라서 mango를 출력한다.

    fruitList대신 리스트 자체를 넣어줘도 상관 없다.

    for x in ["apple", "banana", "orange", "mango"]:
    print(x) apple banana orange mango

    또한 파이썬에서는 [ ] 내부에서 반복문도 가능하다. 조금 헷갈릴 수 있으니 참고만 하고 나중에 다시 봐도 좋다.

    list = [c for c in "apple"]
    print(list) ['a', 'p', 'p', 'l', 'e']

    for c in "apple"는 위와 똑같이 (리스트 대신) 문자열을 인덱스 0부터 마지막까지 돌면서 해당 아이템을 c에 담은 뒤 그 아이템을 다시 list에 담으라는 뜻이다.

    정렬 (Sorting)

    만약 어떤 리스트에 숫자가 무작위로 들어가 있고 여러분은 그걸 순서대로 정렬해야 한다고 하면 어떻게 할 것인가? 정렬을 하는데 다양한 알고리즘이 있지만 파이썬 리스트에서는 기본적으로 정렬 함수를 제공한다.

    numberList = [3 , 5, 23, 1, 76, 423232, 45]
    numberList.sort()
    print(numberList) [1, 3, 5, 23, 45, 76, 423232]

    오늘은 파이썬 자료형 리스트에서 제공하는 여러가지 함수를 통해 삽입, 수정, 삭제, 반복, 정렬 하는 법을 알아보았다. 이 외에도 유용한 함수들이 많으니 필요 할 때 찾아서 사용하면 되겠다. 다음 포스트에서는 딕셔너리에 대해 소개하도록 한다.


    댓글

f.software engineer @ All Right Reserved