ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [코딩도장] day10. 리스트 할당/복사, 리스트 표현식
    IT/파이썬 2020. 8. 22. 23:30

    ■ 들어가기

    - 파이썬 코딩 도장 (남재윤/길벗). 을 공부하며 정리하는 블로그


    ▶ Unit22. 리스트와 튜플 응용하기

         - 22.1 리스트 조작하기

         - 22.2 리스트의 할당과 복사 알아보기

         - 22.3 반복문으로 리스트의 요소를 모두 출력하기

         - 22.4 리스트의 가장 작은 수, 가장 큰 수, 합계 구하기

         - 22.5 리스트 표현식 사용하기

         - 22.6 리스트에 map 사용하기

         - 22.7 튜플 응용하기

     

    >> 22.2 리스트의 할당과 복사 알아보기 <<

    1. 리스트의 할당과 복사

    - 할당 : 하나의 리스트를 다른 여러 변수가 바라보도록 지정

    - 복사 : 하나의 리스트를 copy하여 다른 리스트로 생성

    >>> a = [10, 20, 30]
    >>> b = a  # 할당
    >>> a
    [10, 20, 30]
    >>> b
    [10, 20, 30]
    >>> a is b    # 동일한 객체 
    True
    >>> b[2] = 99  # a와 b가 동일한 리스트를 바라보는 객체이며, 리스트의 값을 변경하면 a와 b에 모두 반영됨
    >>> b
    [10, 20, 99]
    >>> a
    [10, 20, 99]
    >>> a = [10, 20, 30]
    >>> b = a.copy() # 복사
    >>> a
    [10, 20, 30]
    >>> b
    [10, 20, 30]
    >>> a is b    # 동일하지 않은, 전혀 다른 객체 
    False
    >>> a == b    # 복사된 요소는 모두 같기 때문에 동등비교 시 참(True)
    True
    >>> b[2] = 99  # a와 b가 다른 객체이므로 b의 리스트를 변경해도 a에 영향 미치지 않음
    >>> b
    [10, 20, 99]
    >>> a
    [10, 20, 30]

    >> 22.3 반복문으로 리스트의 요소를 모두 출력하기 <<

    1. for 반복문으로 요소 출력

    - 사용법

    for 변수 in 리스트 :

        코드1

    >>> a = [10, 20, 30, 15, 20, 40]
    >>> for i in a :
    print(i)


    10
    20
    30
    15
    20
    40

    2. for 반복문 시 인덱스와 요소 값 함께 출력

    - 사용법1

    for 인덱스, 요소 in enumerate(리스트) :

        코드1

    >>> a = [38, 21, 53, 62, 19]
    >>> for index, value in enumerate(a) :
    print(index, value)


    0 38
    1 21
    2 53
    3 62
    4 19

    - 사용법2

    for 인덱스, 요소 in enumerate(리스트, start=숫자) :

        코드1

    - 인덱스가 '숫자' 부터 시작하도록 지정

    >>> a
    [38, 21, 53, 62, 19]
    >>> for index, value in enumerate(a, start=0) :    # enumerate(a, 0) 으로 사용 가능
    print(index, value)


    0 38
    1 21
    2 53
    3 62
    4 19

    - 만일 리스트의 인덱스만 출력하고 싶다면? (range함수를 사용하자!)

      ( range함수를 통해 0부터 마지막 인덱스(len(a))까지 리스트가 생성 )

    >>> a
    [38, 21, 53, 62, 19]
    >>> for i in range(len(a)) :
    print(i)


    0
    1
    2
    3
    4

    3. while 반복문으로 요소 출력

    - 변수 i를 활용하여 while 반복문 조건식까지 반복하도록 설정

    >>> a = [38, 21, 53, 62, 19]
    >>> i = 0
    >>> while i < len(a) :
    print(a[i])
    i += 1


    38
    21
    53
    62
    19

    >> 22.4 리스트의 가장 작은 수, 가장 큰 수, 합계 구하기 <<

    1. 가장 작은 수, 가장 큰 수 구하기

      1) for 반복문, if 조건문으로 설정하기

      2) sort 메서드 사용하기

      3) min, max 함수 사용하기

    >>> a = [38, 21, 53, 62, 19]
    >>> smallest = a[0]
    >>> for i in a :
    if i < smallest :
    smallest = i


    >>> smallest
    19
    >>> largest = a[0]
    >>> largest
    38
    >>> for i in a :
    if i > largest :
    largest = i


    >>> largest
    62
    >>> a
    [38, 21, 53, 62, 19]
    >>> a.sort()
    >>> a
    [19, 21, 38, 53, 62]
    >>> a[0]  # 가장 작은 수 확인
    19
    >>> a[-1]  # 가장 큰 수 확인
    62
    >>> a.sort(reverse=True)
    >>> a
    [62, 53, 38, 21, 19]
    >>> a[0]  # 리스트를 내림차순으로 정렬 수 가장 큰 수 확인
    62
    >>> a = [38, 21, 53, 62, 19]
    >>> min(a)
    19
    >>> a
    [38, 21, 53, 62, 19]
    >>> max(a)
    62
    >>> a
    [38, 21, 53, 62, 19]

    2. 요소의 합계 구하기

      1) for 반복문, if 조건문으로 설정하기

      2) sum 함수 사용하기

    >>> a
    [38, 21, 53, 62, 19]  
    >>> sum = 0
    >>> for i in a :
    sum += i


    >>> sum
    193
    >>> a
    [38, 21, 53, 62, 19]
    >>> sum(a)
    193

    - 앗!! sum(a) 가 안된다구요?? "TypeError: 'int' object is not callable"

    >>> a = [38, 21, 53, 62, 19]
    >>> sum(a)
    Traceback (most recent call last):
      File "<pyshell#266>", line 1, in <module>
        sum(a)
    TypeError: 'int' object is not callable

    -> 앞선 테스트에서 sum 이란 변수를 사용했었기 때문에 해당 변수를 호출하고 있어 에러가 발생하는 것임.

    -> del 함수로 sum 변수 삭제 후 다시 시도하면 문제 해결 ~!   ( del sum )

    ( sum은 파이썬에서 합계를 구하는 함수이므로 사용하지 말자. 이외에도 파이썬에서 제공하는 함수명과 동일하게 변수를 사용하지 말자~ )


    >> 22.5 리스트 표현식 사용하기 <<

    - 리스트 안에 for 반복문과 if 조건문을 사용할 수 있다?!

    - 리스트 표현식 : 리스트 안에 "식", "for 반복문"을 지정하여 리스트를 생성하는 방법

    - 사용법

    • [식 for 변수 in 리스트]
    • list(식 for 변수 in 리스트)
    >>> a = [i for i in range(10)] # 0부터 9까지 숫자를 생성하여 리스트 생성
    >>> a
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> b = list(i for i in range(10))
    >>> b
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    -> range()를 통해 숫자를 생성하고, 변수 i로 숫자를 하나 씩 꺼내고, i를 이용해서 리스트를 만들겠다!!

    >>> a = [i + 5 for i in range(10)] # 0부터 9까지 숫자를 생성하면서 값에 5를 더하여 리스트 생성
    >>> a
    [5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
    >>> b = [i * 2 for i in range(10)] # 0부터 9까지 숫자를 생성하면서 값에 2를 곱하여 리스트 생성
    >>> b
    [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

    1. 리스트 표현식에 if 조건문 사용하기

    - 사용법

    • [식 for 변수 in 리스트 if 조건식]
    • list(식 for 변수 in 리스트 if 조건식)

    - 리스트 표현식 내 if 조건문은 항상 for 반복문 뒤에 지정!

    >>> a = [i for i in range(10) if i%2 == 0] # 0부터 9까지 숫자 중 2의 배수인 숫자(짝수)로 리스트 생성
    >>> a
    [0, 2, 4, 6, 8]

    2. for 반복문과 if 조건문을 여러 번 사용하기

    - 사용법

    [식 for 변수1 in 리스트1 if 조건식1

        for 변수2 in 리스트2 if 조건식2

        ...

        for 변수n in 리스트n if 조건식n]

    list(식 for 변수1 in 리스트1 if 조건식1

            for 변수2 in 리스트2 if 조건식2

            ...

            for 변수n in 리스트n if 조건식n)

    >>> a = [i * j for j in range(1, 10) for i in range(2, 3)]
    >>> a
    [2, 4, 6, 8, 10, 12, 14, 16, 18]
    >>> b = [i * j for j in range(1, 10)
           for i in range(2, 3)]
    >>> b
    [2, 4, 6, 8, 10, 12, 14, 16, 18]

    -> 리스트 표현식 내 for 반복문이 여러 개 일 경우, 뒤->앞의 순서로 처리함!

    -> for 반복문을 여러 개 작성 시 한 줄로 작성 가능하지만 가독성을 위해 여러 줄로 입력!

     

    ● 요약 ●

    1. 파이썬은 모든 것을 리스트로 처리하는구나~

    2. 파이썬은 제공되는 함수가 엄청 많구나 ~

     

    댓글

Designed by Tistory.