티스토리 뷰

728x90
반응형

 

 

파이썬에서는 리스트 간의 곱셈을 직접적으로 수행할 수는 없지만, 여러 가지 방법으로 리스트 요소들을 곱하는 작업을 수행할 수 있습니다. 이 글에서는 리스트 간의 곱셈을 처리하는 방법에 대해 자세히 설명하고, 주민등록번호의 유효성을 체크하는 프로그램을 예제로 보여드리겠습니다. 

1. 리스트 간의 요소별 곱셈

리스트의 각 요소끼리 곱하는 방법은 여러 가지가 있습니다. 여기서는 기본적인 for 루프, 리스트 컴프리헨션, 그리고 NumPy 라이브러리를 사용하는 방법을 소개합니다.

(1) 기본적인 리스트 간의 곱셈

리스트의 요소를 for 루프를 통해 곱하는 방법입니다.

예제: 기본적인 for 루프 사용

python

def multiply_lists_basic(list1, list2):
    result = []
    for i in range(len(list1)):
        result.append(list1[i] * list2[i])
    return result

list1 = [1, 2, 3]
list2 = [4, 5, 6]
print(multiply_lists_basic(list1, list2))  # 출력: [4, 10, 18]

(2) 리스트 컴프리헨션 사용하기

리스트 컴프리헨션을 사용하면 더 간결하게 표현할 수 있습니다.

예제: 리스트 컴프리헨션 사용

python

def multiply_lists_comprehension(list1, list2):
    return [a * b for a, b in zip(list1, list2)]

list1 = [1, 2, 3]
list2 = [4, 5, 6]
print(multiply_lists_comprehension(list1, list2))  # 출력: [4, 10, 18]

(3) NumPy 라이브러리 사용하기

리스트 간의 곱셈을 더 효율적으로 처리하고 싶다면 NumPy 라이브러리를 사용할 수 있습니다.

예제: NumPy로 리스트 곱셈하기

python

import numpy as np

def multiply_lists_numpy(list1, list2):
    array1 = np.array(list1)
    array2 = np.array(list2)
    return array1 * array2

list1 = [1, 2, 3]
list2 = [4, 5, 6]
print(multiply_lists_numpy(list1, list2))  # 출력: [ 4 10 18]

 

2. 실전 예제 : 주민등록번호 유효성 체크 프로그램

이제 리스트 간의 곱셈을 사용하여 주민등록번호의 유효성을 체크하는 프로그램을 만들어 보겠습니다. 주민등록번호는 특정 규칙에 따라 검증할 수 있습니다. 

 

 

실전 문제 :
주민등록번호는 13자리로 구성되는데 마지막 자리수는 주민등록번호의 유효성을 체크하는데 사용됩니다. 먼저 앞에서부터 12자리의 숫자에 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5를 차례로 곱한 뒤 그 값을 전부 더하고, 연산 결과 값을 11로 나누면 나머지가 나오는데 11에서 나머지를 뺀 값이 주민등록번호의 마지막 번호가 되어야 합니다. 이 값이 맞으면 유효성이 통과되도록, 틀리면 유효성이 실패하도록 프로그램을 구현해 보시오!

생각해 보고 풀어 봅시다.

 

 

기본적인 리스트 곱셈을 이용한 유효성 체크

python

def validate_id_number_basic(id_number):
    id_number = id_number.replace("-", "")
    
    if len(id_number) != 13 or not id_number.isdigit():
        return False

    weights = [2, 3, 4, 5, 6, 7, 8, 9, 2]
    weighted_sum = 0

    for i in range(8):
        weighted_sum += int(id_number[i]) * weights[i]

    check_digit = (11 - (weighted_sum % 11)) % 10
    return check_digit == int(id_number[-1])

example_id = "123456-1234567"
print(validate_id_number_basic(example_id))  # 출력: True 또는 False

리스트 컴프리헨션을 이용한 유효성 체크

python

def validate_id_number_comprehension(id_number):
    id_number = id_number.replace("-", "")
    
    if len(id_number) != 13 or not id_number.isdigit():
        return False

    weights = [2, 3, 4, 5, 6, 7, 8, 9, 2]
    weighted_sum = sum(int(num) * weight for num, weight in zip(id_number[:-1], weights))

    check_digit = (11 - (weighted_sum % 11)) % 10
    return check_digit == int(id_number[-1])

print(validate_id_number_comprehension(example_id))  # 출력: True 또는 False

NumPy를 이용한 유효성 체크

python

import numpy as np

def validate_id_number_numpy(id_number):
    id_number = id_number.replace("-", "")
    
    if len(id_number) != 13 or not id_number.isdigit():
        return False

    weights = np.array([2, 3, 4, 5, 6, 7, 8, 9, 2])
    numbers = np.array([int(digit) for digit in id_number[:-1]])
    
    weighted_sum = np.dot(numbers, weights)
    check_digit = (11 - (weighted_sum % 11)) % 10
    
    return check_digit == int(id_number[-1])

print(validate_id_number_numpy(example_id))  # 출력: True 또는 False

 

3. 리스트 연산시 유의사항

  1. 리스트 길이 일치: 두 리스트의 길이가 다르면 요소별 곱셈을 수행할 수 없습니다. 반드시 길이를 체크해야 합니다.
  2. 데이터 타입: 리스트의 요소가 정수, 부동소수점 숫자, 문자열 등 다양한 타입일 수 있습니다. 데이터 타입에 따라 곱셈 결과가 달라질 수 있으니, 곱셈을 수행하기 전에 데이터 타입을 확인하는 것이 좋습니다.
  3. NumPy 설치: NumPy를 사용하려면 먼저 설치해야 합니다. pip install numpy 명령어로 설치할 수 있습니다.
  4. 성능 고려: 큰 리스트의 경우, for 루프보다 NumPy를 사용하는 것이 성능상 유리합니다. 특히 대량의 데이터 처리가 필요한 경우 NumPy를 고려하는 것이 좋습니다.

 

결론

파이썬에서 리스트 간의 곱셈은 여러 가지 방법으로 수행할 수 있으며, 각 방법은 상황에 따라 다르게 활용될 수 있습니다. 주민등록번호의 유효성을 체크하는 프로그램을 통해 리스트 간의 곱셈이 실제로 어떻게 사용될 수 있는지를 보여주었습니다. 리스트의 길이와 데이터 타입에 주의하여 안전한 코드를 작성하는 것이 중요합니다.

728x90
반응형