[Python] 리스트 다루기(생성,추가,인덱싱)

반응형
    반응형

    리스트와 튜플은 복수개의 값을 담는 데이터 구조를 말합니다. 실생활에서 쓰는 명단과 같은 의미입니다. 즉, 전학생 명단, 출석 명단 등등 한 주제 안에 모아진 것들을 의미합니다. 리스트는 생성된 후에 값 변경이 가능하고 튜플은 값 변경이 불가능합니다. 그런 이유로 파이썬에서는 리스트를 정말 많이 씁니다. 무언가 데이터를 가져오면 대개 리스트 형식으로 가져오거나 리스트로 만들어서 알고리즘을 만드는 것이 일반적입니다. 반면에 튜플은 정말 변하면 안 되는 리스트를 설정할 때 씁니다. 그럼 튜플을 다루지 못하나 걱정하실 수도 있는데 다행히도 튜플을 리스트로 변경해서 쓸 수 있으니 데이터 다루는 데에는 큰 문제가 없을 겁니다. 그래서 잘 쓰면 알고리즘을 쉽게 만들 수 있습니다. 이번 포스팅에서는 리스트의 대한 개념과 자주 쓰는 관련 함수에 대해 설명하려 합니다. 


    List

    리스트를 알아봅니다.

    리스트를 만들려면 세가지 방법이 있습니다.

    • [] 안에 값을 담아서 생성
    • list() 함수로 생성
    • str.split() 함수로 생성
    a= 'hello world'
    b= list(a)
    c =(1,2,3)
    d = list(c)

    list를 생성할 때는 문자열에 있는 것을 리스트로 가져올 수 있고 튜플도 가능합니다. (튜플은 생성할 때 ()로 생성합니다)

    문자열은 일반적으로 인덱스 하나당 하나의 원소로 인식해서 리스트에 인덱스별로 들어갑니다. 하지만 한 글자만 하면 쓸모가 없습니다. 의미 있는 문자열로 리스트를 해야 나중에 사용을 할 수 있지 않을까요. 그럴 때 split() 함수를 씁니다. 

    앞서 '문자열 다루기' 포스팅에서 사용법은 설명했으니 혹시 잘 모르시는 분들은 아래 포스팅을 참고하시기 바랍니다.

    https://seong6496.tistory.com/28

     

    [Python] 문자열(string) 다루기

    알면 편하지만 모르면 코드 진행이 안되는 문자열에 대해 살펴보고자 합니다. 문자열은 복수개의 문자를 순서대로 나열한 것인데 여기서 순서가 있다는 것이 중요합니다. 아무 생각없이 문자를 나열해도 python 에..

    seong6496.tistory.com

     


    List indexing

    문자열에 인덱스라 있었듯이 리스트에서도 인덱스가 있습니다. 문자열과 마찬가지로 가장 앞에 있는 원소가 0번째 인덱스가 되겠습니다. 인덱스를 이용해 리스트의 원소를 뽑을 수 있는데 list [인덱스 번호]으로 할 수 있습니다.

    a = [1,2,3,4,5]
    print(a[2])
    print(a[5])
    print(a[-1])

     

    문자열과 마찬가지로 음수의 인덱스로 거꾸로 불러올 수 있습니다.

    인덱스 다루는 것은 문자열과 굉장히 흡사합니다. slicing 도 할 수 있는데 문자열과 동일합니다.

    당연히 리스트를 slicie 하면 역시 list가 됩니다. 

     

    a =[1,2,3,4,5]
    print(a[1:3])
    print(a[:5])
    print(a[3:])

    리스트의 값을 변경하고 싶을 때 인덱스를 활용합니다. 

     

    a = [1,2,3,4,5]
    a[0] = 100
    a[4] = 30
    print(a)

    리스트의 0번째와 4번째의 값이 바뀌는 것을 볼 수 있습니다.


    List 관련 함수

    리스트를 다루면서 쓰게되는 함수들입니다.

    append(), extend()

    append는 리스트의 끝에 원소를 추가합니다. 여기서 원소는 문자열, 숫자, 리스트, 튜플 뭐든 다 해당됩니다.  extend는 리스트를 연장시킵니다. += 을 사용해서도 extend와 같은 효과를 낼 수 있습니다.

     

    a =[1,2,3,4,5]
    b =[6,7,8,9,10]
    a.append(10)
    a.append(b)
    print(a)

    append로 리스트를 추가하면 리스트 그 자체로 추가가 됩니다. 이렇게 의도적으로 리스트를 넣을 수도 있지만 

    리스트를 연장하는 extend를 쓰면 리스트로써 추가되지 않습니다.

    a = [1,2,3,4,5]
    b = [6,7,8,9,10]
    a.extend(b)
    a +=b
    print(a)
    

    extend와 += 를 동시에 쓰겠습니다.

    그러면 a.extned(b) 로 리스트는 a = [1,2,3,4,5,6,7,8,9,10]으로 될 것이고,

    그 a가 다시 a+=b 로 인해 a=[1,2,3,4,5,6,7,8,9,10,6,7,8,9,10]으로 될 것입니다.

    결국, extend 와 += 는 같은 기능을 하는 것을 볼 수 있습니다.

     

    insert(), remove(), pop()

    insert 도 append와 같이 원소를 추가하는 함수인데 append는 리스트의 끝에 추가하는 반면 insert는 원하는 위치에 추가할 수 있습니다.

    insert(index, object)로 넣으면 되는데 index는 원소가 들어갈 위치를 인덱스로 나타내서 넣으면 되고, object 에는 원하는 값을 넣으면 됩니다.

    remove()는 원소를 삭제합니다. 가로 안에는 인덱스 값이 아닌 원소 값을 넣는다는 것을 유의하시면 되겠습니다.

    pop() 은 지우고자 하는 원소를 반환 후, 삭제하는 기능입니다. 즉, 어디에 쓰고선 리스트에선 빼겠다는 얘기입니다.

    pop의 가로에 아무것도 넣지 않으면 리스트의 맨 끝을 반환 후 삭제합니다. pop 은 remove와 다르게 가로 안에는 index를 넣어야 합니다.

    a = [1,2,3,4,5,6]
    a.insert(1,40)
    print(a)
    a.remove(3)
    a.pop()
    d = a.pop(2)
    print(a)
    print(d)

    위의 함수를 한꺼번에 사용해보겠습니다.

    먼저 a라는 리스트의 1번째 인덱스에 40을 넣습니다.

    그러면 [1,40,2,3,4,5,6]이 나올 것이고, 3을 remove로 지우고 pop으로 6을 내보냈습니다.

    a = [1,40,2,4,5]가 남았고, 그 상태에서 d에 2번째 인덱스의 값인 2를 대입하고

    pop의 기능에 의해 a에서 2는 나가게 되었습니다.

    이런 과정을 통해서 위의 결과가 나왔습니다.

     

    index(), sort(), sorted()

    index 함수는 값의 인덱스가 무엇인지 알려줍니다. sort와 sorted는 둘다 리스트를 정렬해주지만 sort는 리스트 자체를 내부적으로 정렬해주는 함수이고, sorted 는 정렬된 복사본을 내놓습니다. 즉, sorted 는 원래의 리스트를 정렬시키지 않고 sort는 원래의 리스트를 정렬시켜줍니다. 

     

    a =[9,10,7,19,1,2,20,21,7,8]
    a.sort(reverse =True)
    b = sorted(a)
    print(a)
    print(b)
    print(a.index(9),b.index(9))

    sort와 sorted는 일반적으로 오름차순으로 정렬해줍니다.

    내림차순으로 하고 싶다면 reverse=True를 넣어주시면 되겠습니다.

    위의 코드는 먼저 a를 내림차순으로 정렬을 했습니다.

    그다음 sorted를 이용해 오름차순 정렬을 복사본 b를 만들고

    a, b 리스트를 출력하고 9 값이 a,b 각각의 인덱스가 무엇인지 출력해달라고 요청했습니다.

    보시는 바와 같이 9의 인덱스가 a와 b 가 다름을 알 수 있습니다.

     

     

    in

    반복문을 쓰게 되면 참 많이 쓰는 in입니다. 수학에서 집합의 원소 안에 해당 원소가 있는지 없는지 판단을 하는 문제를 풀어보셨다면 이해가 금방 될 것 같습니다. in은 리스트 안에 원소 값이 존재하는지 확인해줍니다. 즉, True, False 중 한 가지로 나오는 bool 타입입니다.

    a = [1,2,3,4,5,6]
    b = 7
    c = b in a
    print(c)

     

    'Python > 기초' 카테고리의 다른 글

    [Python] 조건문(if, elif, else)  (0) 2020.03.30
    [Python] 딕셔너리(dictionary)  (0) 2020.03.28
    [Python] 문자열(string) 다루기  (0) 2020.03.25
    [python] 변수 이해  (0) 2020.03.23
    Jupyter notebook 사용법  (0) 2020.03.22

    댓글

    Designed by JB FACTORY

    ....