티스토리 뷰

일상/파이썬

파이썬 리스트 사칙연산

정책온니 2023. 3. 29. 10:33

📌 목차

    파이썬 리스트 사칙연산

    파이썬에서 리스트는 사칙 연산을 지원합니다. 리스트의 사칙 연산을 사용하면 여러 리스트를 연산하여 새로운 리스트를 생성할 수 있습니다.

     

    리스트 더하기 연산(+)

    먼저, 리스트 더하기 연산을 사용하면 두 개의 리스트를 이어붙인 새로운 리스트를 생성할 수 있습니다. 다음은 리스트 더하기 연산의 예시입니다.

    list1 = [1, 2, 3]
    list2 = [4, 5, 6]
    result = list1 + list2
    print(result) #[1, 2, 3, 4, 5, 6]

     

    리스트 곱하기 연산(*)

    리스트 빼기 연산은 첫 번째 리스트에서 두 번째 리스트에 포함된 원소를 제거한 새로운 리스트를 생성합니다. 다음은 리스트 빼기 연산의 예시입니다.

    list1 = [1, 2, 3]
    result = list1 * 3
    print(result) #[1, 2, 3, 1, 2, 3, 1, 2, 3]
    list1 = [1, 2, 3, 4, 5]
    list2 = [3, 4]
    result = [x for x in list1 if x not in list2]
    print(result)

     

    리스트 빼기 연산(-)

    두리스트 사이의 빼기 연산은 불가능하다! 리스트 간의 빼기 연산은 차집합을 구하는 연산으로 생각해야 합니다.

    리스트 간의 빼기 연산을 하기 위해서는 집합(set)으로 변환한 뒤, 차집합 연산을 수행해야 합니다. 예를 들어, 다음과 같이 리스트 간의 차집합을 구할 수 있습니다.

    그래서 

    list1 = [1, 2, 3]
    list2 = [2, 3, 4]
    print(list1-list2) 

    를 하게 되면 unsupported operand type(s) for -: 'list' and 'list' 이런 오류가 발생한다.

     

    다음은 리스트에서 빼기 연산을 사용한 예제(차집합)

    리스트 빼기 연산을 구현할 때, 두 가지 방법이 있습니다. 첫 번째 방법은 리스트 컴프리헨션을 사용하는 것이고, 두 번째 방법은 set() 함수를 사용하여 집합으로 변환한 뒤, 차집합 연산을 수행하는 것입니다.

    list1 = [1, 2, 3]
    list2 = [2, 3, 4]
    set1 = set(list1)
    set2 = set(list2)
    result = list(set1 - set2)
    print(result)
    list1 = [1, 2, 3]
    list2 = [2, 3, 4]
    result = [x for x in list1 + list2 if x not in list1 or x not in list2]
    print(result)

     

    그렇다면, 

    set()함수를 사용하는 코드와 리스트 컴프리헨션을 사용한 코드 중 어느 코드가 더 효율적일까?

    리스트 컴프리헨션 방법은 간단하고 직관적이지만, 두 리스트의 크기가 커질수록 처리 시간이 길어지는 단점이 있습니다. 이에 비해 set() 함수를 사용하는 방법은 집합 연산의 성질을 이용하여 더 빠르게 처리할 수 있습니다. 따라서 두 방법을 비교하면, set() 함수를 사용하는 방법이 더 효율적입니다.

    따라서, 위 코드 중에서 list1과 list2의 차집합을 구하는 부분에서는 set() 함수를 사용하여 집합으로 변환한 뒤, 차집합 연산을 수행하는 것이 더 효율적입니다. 따라서 두 코드 중에서는 아래 코드가 더 효율적입니다. 

     

    리스트 나누기 연산(/)

    리스트 나누기 연산은 파이썬에서 지원하지 않는 연산입니다. 따라서 리스트를 나누기 위해서는 슬라이싱을 사용해야 합니다.

    위에서 설명한 리스트 연산들은 리스트를 다룰 때 유용하게 사용될 수 있습니다. 다만, 리스트 곱하기 연산은 리스트를 반복적으로 사용해야 할 때나 리스트의 크기를 조절해야 할 때 유용하게 사용될 수 있습니다.

     

    리스트 곱하기 연산을 이용한 리스트 초기화
    list1 = [0] * 5
    print(list1) #[0, 0, 0, 0, 0]

    위의 코드에서는 [0, 0, 0, 0, 0]와 같은 크기의 리스트를 초기화합니다.

     

    3개의 리스트 더하기 연산을 이용한 리스트 병합
    list1 = [1, 2, 3]
    list2 = [4, 5, 6]
    list3 = [7, 8, 9]
    result = list1 + list2 + list3
    print(result) #[1, 2, 3, 4, 5, 6, 7, 8, 9]

    위의 코드에서는 list1, list2, list3를 이어붙인 리스트를 생성합니다. 실행 결과는 [1, 2, 3, 4, 5, 6, 7, 8, 9]가 됩니다.

     

    리스트 빼기 연산(차집합)을 이용한 중복 원소 제거
    list1 = [1, 2, 3, 3, 4, 5]
    list2 = [3, 5]
    result = list(set(list1) - set(list2))
    print(result) #[1, 2, 4]
    list1 = [1, 2, 3, 4]
    list2 = [3, 4, 5, 6]
    result = [x for x in list1 + list2 if x not in list1 or x not in list2]
    print(result) #[1, 2, 5, 6]

     

    리스트 더하기 연산을 이용한 리스트 합치기
    list1 = ['a', 'b']
    list2 = ['c', 'd']
    result = [i + j for i in list1 for j in list2]
    print(result)