ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TIL.4 list 함수 응용편
    TIL 2020. 10. 12. 23:19
    728x90

    ## 리스트의 요소 추가하기

    # append: 요소 하나를 추가

    # extend: 리스트를 연결하여 확장

    # insert: 특정 인덱스에 요소 추가

    b = []

    b.append(10)

    print(b)

    :: [10]


    a = [102030]

    a.append(500)

     

    print(a)

    :: [10, 20 30, 500]

     

    ## 여기서 주의점은 기존 a라는 리스트에 500이 추가되는 방식으로 리스틑가 "변경"되는것이지 새 리스트를 "생성"하는것은 아니다.


    c = [10203040]

     

    c.append(50)

    print(c)

    :: [10, 20, 30, 40, 50]

     

    print(len(c)) # len(c) == 5

     

    c.append([6070])

    print(c)

    :: [10, 20, 30, 40, 50, [60, 70]]

     

    print(len(c)) #len(c) == 6

     

    ## append로 리스트 안에 리스트를 넣을 수 있다. 





    ## 2. extend // 리스트 끝에 다른 리스트를 연결하여 리스트를 확장함.

    ## append 와의 차이점이 여기서 발생

     

    d = [10203040]

     

    d.extend([506070]) # 소괄호, 대괄호 주의

    ::

    # d = [10, 20, 30, 40, 50, 60, 70]

     

    print(len(d)) #len(d) == 7 

     

    ## 3. insert // 인덱스, 요소를 리스트의 특정 인덱스에 요소를 하나 추가함.

    ## 리스트 사이에 원하는 값을 추가할 수 있게 해줌.

    ## append, extend는 리스트 끝에 추가 된다는 점읻   


    e = [102030]

     

    e.insert(2500# 인덱스 2번 자리에 500을 넣어주세요!

     

    ::  # e = [10, 20, 500, 30]

     

    # insert(0, 요소): 리스트의 맨 처음에 요소를 추가

    # insert(len(리스트), 요소): 리스트 끝에 요소를 추가


    a = [102030]

    a.insert(1, [500600])

    :: # a =[10, [500, 600], 20, 30]

     

    # insert안에 리스트를 넣으면 append처럼 리스트 안에 리스트가 들어감.


    b = [123]

    b[1:3] = [456# insert와 비슷 [1:3]

    print(b)

    ::

    [1, 4, 5, 6] #인덱스 1 ,2, 3 번을 4 , 5, 6 의 값으로 변경

    # 인덱스 슬라이싱을 이용하여 요소를 덮어쓰는것도 가능하다.


    ## 리스트에서 요소 삭제하기

     

    pop: 마지막 요소 또는 특정 인덱스의 요소를 삭제 (몇번째인지)

    remove: 특정 값을 찾아서 삭제 (해당되는 값)

     

    a = [123]

    a.pop()

    :: # [1, 2]

     

    b = [123]

    b.pop(1)

    :: #  [1, 3]

     

    # pop(인덱스번호)를 넣어 선택적 삭제 가능

     

    c = [123]

    del c[1#c의 1번 요소를 삭제해주세요라는 뜻

    :: [1, 3]

     

    ## pop 대신 del 사용 가능


    d = [1020304030]

    d.remove(30)

    ::  # [10, 20, 40, 30]

     

    ## 리스트 d에는 30이라는 값이 2개가 있지만, 가장 처음 찾은 인덱스(2번)만 삭제한다!! (2개 동시 삭제 X)


    ##리스트로 보는 2가지 구조

     

    ## 1. stack(스택) 구조

    가로 -> 세로로 표시 형식만 변경한것으로 좌우는 같음.

    ## 2. deque(큐) 구조

    ## 3. 강의 만으로는 이해가 되지 않으니 추후 질문할것.

    위 사진 처럼 append, pop를 이용해 스택과 큐 구조를 만들 수 있다고 한다.

     

    참고 | 리스트로 스택과 큐 만들기

    지금까지 알아본 리스트의 메서드로 스택(stack)과 큐(queue)를 만들 수 있습니다. 다음과 같이 append pop을 호출하는 그림을 90도 돌리면 스택의 모습이 됩니다.

    여기서 pop() 대신 pop(0)을 사용하면 큐가 됩니다.

    물론 append(), pop(0)이 아닌 insert(0, 요소), pop()을 사용해서 추가/삭제 방향을 반대로 해도 큐가 됩니다.

    파이썬에서 스택은 리스트를 그대로 활용해도 되지만, 큐는 좀 더 효율적으로 사용할 수 있도록 덱(deque, double ended queue)이라는 자료형을 제공합니다. 덱은 양쪽 끝에서 추가/삭제가 가능한 자료 구조입니다.

    deque(반복가능한객체)

    더보기

    >>> from collections import deque    # collections 모듈에서 deque를 가져옴

    >>> a = deque([10, 20, 30])

    >>> a deque([10, 20, 30])

    >>> a.append(500)    # 덱의 오른쪽에 500 추가

    >>> a deque([10, 20, 30, 500])

    >>> a.popleft()     # 덱의 왼쪽 요소 하나 삭제 10

    >>> a deque([20, 30, 500])

    deque append는 덱의 오른쪽에 요소를 추가하고, popleft는 덱의 왼쪽 요소를 삭제합니다. 반대로 appendleft는 덱의 왼쪽에 요소를 추가하고, pop으로 덱의 오른쪽 요소를 삭제할 수도 있습니다.


    a = [102030152040]

    a.index(20)

    :: 1

     

    ## 20 이라는 특정 값의 인덱스 번호 "1"을 구함!

    ## 같은 값이 어려 개일 경우 처음 찾은 인덱스를 구함! 


    b = [102030152040]

     

    print(a.count(20))

    :: 2

     

    # conut로 리스트의 특정 값의 개수(2)를 구함


    c = [102030152040]

     

    c.reverse()

     

    :: # [40, 20, 15, 30, 20, 10]

     

    # reverse로 리스트의 요소 ##순서를 반대로 뒤집음


    d = [102030152040]

    d.sort()

     

    :: # [10, 15, 20, 20, 30, 40]

     

    # sort로 리스트의 요소를 정렬할수 있다 (디폴트 : 오름차순)

    ## sort() 또는 sort(reverse=False) // 리스트의 값을 작은 순서대로 정렬(오름차순) 

    ex : 달리기, 마라톤 등 시간과 관련된 값을 정렬할때 좋음

    ## sort(reverse=True) // 리스트의 값을 큰 순서대로 정렬(내림차순)

     ex : 시험성적 등 점수(?)와 관련된 값을 정렬할때 좋음


    e = [123]

     

    e.clear()

    :: []

     

    ## clear() 리스트의 모든 요소 삭제

     

    f = [123]

    del f[:]

    :: []

     

    ## clear 대신 del f[:]와 같이 시작, 끝 인덱스를 생략하여 리스트의 모든 요소 삭제.


    g = [102030# 0 1 2

     

    g[len(g):] = [500

    :: [10, 20, 30, 500]

    # g[len(g):]은 시작 인덱스를 len(g)로 지정해 리스트의 마지막 인덱스보다 1이 더 큰 상태임 len(g) == 3

    ## g[len(g):] = [500] 이는 곧, g.append(500) 과 같은 의미

     

    g[len(g):] = [500600

    :: [10, 20, 30, 500, 500, 600]

     

    ## 리스트 끝에 리스트를 연결하는 g.extend([500, 600]) 과 같은 의미


    ## 리스트를 할당하다와 복사하다의 의미는?

     

    ## 할당

     

    a = [00000]

     

    b = a        ## "a" 라는 리스트를 "b"에 할당 시켰다

     

    ## 할당하는 것으로 리스트가 2개가 되는 것이 아니라, 실제로는 리스트가 1개 이다.

    ## 하나의 리스트를 가지고 a 이다, b 이다. 라고 사용하는 것.

     

    print(a is b) # True

     

    ## True : 변수 이름만 다를 뿐 a와 b는 같은 객체이다

     

    b[2] = 99 ## 리스트 값 변경

     

    ## b의 인덱스 2번의 값을 99로 "변경"



    print(a) 

    print(b)

    ::

    ## 둘다 [0, 0, 99, 0, 0] 출력


    ## 복사

     

    c = [00000]

    d = c.copy()

     

    ## copy 라는 메서드를 이용해 c 리스트의 모든 요소를 d에 복사한다.

    ## 따라서 변수 2개 / 리스트 2개가 생성

     

    print(c is d)  # False

     

    ## c와 d를 is 연산자로 비교시 False가 나옴 즉, c, d 리스트는 서로 다른 객체임!

     

    print(c == d) # True

     

    ## c와 d 복사된 요소가 현제 변경된 점이 없어 모두 0000으로 요소의 값이 모두 같기 때문에 True 나옴

    ## 둘 중 어느 "한 변수" 만의 요소를 변화시키면 False가 나옴

     

    d[2] = 99 # d 리스트의 인덱스 2번 값을 99로 변경

     

    print(c) :: ## [0, 0, 0, 0, 0] 출력

    print(d) :: ## [0, 0, 99, 0, 0] 출력


    ## 반복문 for, while 을 이용해 리스트 요소 모두 출력하기.

     

    ## for 문

     

    a = [3821536219]

    for i in a: # a 대신 [38, 21 ...] 리스트를 직접넣어도됌

        print(i)



    for index, value in enumerate(a):

        print(index, value)

     

    for f, g in enumerate(a):

        print(f, g)

     

    ## enumerate() // 인덱스와 요소 함께 출력

    ## 여기서 index, value 자리에 임의의 값이 들어가도 됌

     

    for index, value in enumerate(a):

        print(index +1, value)

     

    # 표시 형식을 인덱스 0이 아닌 1로 단순 표기만 바꾸는 방법이다(1번_방법)

     

    for index, value in enumerate(a, start=1):

        print(index, value)



    ## 위의 식보다 더 Python 스러운 방법!!

    ## for 인덱스, 요소 in enumerate(리스트, start=숫자) 로 표기 방벙을 바꿀수 있다 (2번_방법)

     

    ## while 문

     

    a = [3821536219]

    i = 0

     

    while i < len(a):

        print(a[i])

        i += 1

     

    ## i <= len(a): 를 해버리면 error 왜냐, len(a)== 5인데, a 리스트의 5번째 인덱스는 없기 때문 (0 ~ 4가 끝)




    728x90
Designed by Tistory.