콘텐츠로 건너뛰기

파이썬 배열 사용법, 리스트 말고 진짜 배열입니다

    들어가며

    파이썬에서 배열(Array)은 리스트와 유사하지만 고정된 데이터 타입을 가지며, 메모리 사용과 성능 면에서 더 효율적입니다. 특히 숫자 데이터를 효율적으로 저장하고 처리하는 데 유용하게 사용할 수 있죠. 이 글에서는 파이썬 배열 사용 법에 대해 정리해 보았습니다. array 모듈을 사용하여 배열을 선언하고 다루는 방법에 대해 알아볼게요.

    파이썬 배열 선언 및 초기화

    배열을 선언할 때는 array 모듈을 사용하며, 배열의 데이터 타입과 초기 값을 지정해야 합니다. 배열의 데이터 타입은 문자열 코드로 지정되며, 배열의 요소는 모두 동일한 데이터 타입을 가져야 합니다.

    import array
    
    # 배열 선언 구조
    # array.array('타입코드', [요소1, 요소2, ...])
    
    # 예제
    numbers = array.array('i', [1, 2, 3, 4, 5])
    print(numbers)  # array('i', [1, 2, 3, 4, 5])

    데이터 타입 코드

    파이썬 array 모듈에서 사용되는 데이터 타입 코드는 다음과 같습니다.

    • ‘b’: signed char (1 byte)
    • ‘B’: unsigned char (1 byte)
    • ‘u’: Unicode character (2 bytes)
    • ‘h’: signed short (2 bytes)
    • ‘H’: unsigned short (2 bytes)
    • ‘i’: signed int (2 bytes)
    • ‘I’: unsigned int (2 bytes)
    • ‘l’: signed long (4 bytes)
    • ‘L’: unsigned long (4 bytes)
    • ‘q’: signed long long (8 bytes)
    • ‘Q’: unsigned long long (8 bytes)
    • ‘f’: float (4 bytes)
    • ‘d’: double (8 bytes)

    예제

    import array
    
    # 정수 배열 (signed int)
    numbers = array.array('i', [1, 2, 3, 4, 5])
    print(numbers)  # array('i', [1, 2, 3, 4, 5])
    
    # 부호 없는 정수 배열 (unsigned int)
    unsigned_numbers = array.array('I', [1, 2, 3, 4, 5])
    print(unsigned_numbers)  # array('I', [1, 2, 3, 4, 5])
    
    # 부동 소수점 배열 (float)
    float_numbers = array.array('f', [1.0, 2.0, 3.0, 4.0, 5.0])
    print(float_numbers)  # array('f', [1.0, 2.0, 3.0, 4.0, 5.0])

    2차원 배열 선언하기

    파이썬의 array 모듈을 사용하여 2차원 배열을 선언하려면 중첩 리스트를 사용해 배열을 생성하면 됩니다.

    python코드 복사import array
    
    # 2차원 배열 선언 (중첩 리스트 사용)
    array_2d = array.array('i', [array.array('i', [1, 2, 3]),
                                 array.array('i', [4, 5, 6]),
                                 array.array('i', [7, 8, 9])])
    
    # 출력
    for row in array_2d:
        for element in row:
            print(element, end=' ')
        print()
    

    이 방법은 중첩 리스트를 사용하여 2차원 배열을 구현한 것으로, array 모듈 자체는 다차원 배열을 직접적으로 지원하지 않기 때문에 이렇게 선언할 수 밖에 없죠.

    만들어두고 나니 뭔가 배열같지가 않습니다. N 차원 배열을 선언하고 싶다면 numpy모듈을 사용하는게 더 수월하답니다.

    아래글을 통해 numpy로 N차원 배열 만드는 방법 알아보세요

    배열의 주요 메서드와 속성

    요소 추가 및 제거

    배열에 요소를 추가하거나 제거하는 메서드도 알아두면 배열을 다루는 과정이 좀 더 수월하겠죠? 메서드들은 아래와 같습니다.

    • append(x): 배열의 끝에 요소 x를 추가합니다.
    • insert(i, x): 인덱스 i에 요소 x를 추가합니다.
    • remove(x): 배열에서 첫 번째로 나타나는 요소 x를 제거합니다.
    • pop([i]): 인덱스 i의 요소를 제거하고 반환합니다. i를 지정하지 않으면 마지막 요소를 제거하고 반환합니다.

    예제

    # 요소 추가
    numbers.append(6)
    print(numbers)  # array('i', [1, 2, 3, 4, 5, 6])
    
    # 특정 위치에 요소 추가
    numbers.insert(2, 9)
    print(numbers)  # array('i', [1, 2, 9, 3, 4, 5, 6])
    
    # 요소 제거
    numbers.remove(9)
    print(numbers)  # array('i', [1, 2, 3, 4, 5, 6])
    
    # 마지막 요소 제거
    last_element = numbers.pop()
    print(last_element)  # 6
    print(numbers)  # array('i', [1, 2, 3, 4, 5])

    배열의 슬라이싱

    배열도 리스트처럼 슬라이싱을 통해 부분 배열을 추출할 수 있습니다.

    예제

    # 배열 슬라이싱
    sub_array = numbers[1:4]
    print(sub_array)  # array('i', [2, 3, 4])

    배열의 활용

    배열은 다음과 같은 경우에 특히 유용합니다:

    • 메모리 효율성: 동일한 데이터 타입을 가지는 요소들을 저장할 때 메모리를 절약할 수 있습니다.
    • 빠른 연산: 숫자 연산에 특화된 작업에서 리스트보다 빠르게 처리할 수 있습니다.
    • 고정된 타입: 모든 요소가 동일한 데이터 타입을 가져야 하므로 데이터 무결성을 유지할 수 있습니다.

    계속 언급된 ‘리스트’는 어떤데? 궁금하시다면 아래글이…

    리스트와 비슷한 유용한 데이터 구조들도 유용할거에요

    정리

    파이썬에서 배열을 사용하는 방법을 이해하면, 메모리 사용과 성능을 최적화할 수 있습니다. 배열은 리스트와 유사하지만, 고정된 데이터 타입을 가지며, 숫자 데이터 처리에 특히 유용합니다. 이 글에서 소개한 배열의 선언, 요소 추가 및 제거, 슬라이싱 등의 방법을 통해 배열을 효과적으로 활용해 보세요.