배열은 C/C++, Java 등에서 매우 널리 사용되는 데이터 구조입니다. 이러한 언어에서 배열은 유사한 데이터 유형의 둘 이상의 요소 모음으로 정의됩니다. Python에는 배열에 해당하는 내장 기능이 없습니다. List와 Tuple은 요소의 모음이지만 유형이 다를 수 있습니다.
Python의 배열 모듈은 C 유형 배열을 에뮬레이트합니다. 모듈은 '배열' 클래스를 정의합니다. 다음 생성자는 배열 객체를 생성합니다:
array(typecode, initializer)
typecode 인수는 배열의 유형을 결정합니다. 이니셜라이저는 일치하는 유형의 모든 요소가 포함된 시퀀스여야 합니다.
다음 문은 정수 배열 개체를 만듭니다.
>>> import array >>> arr = array.array('i', range(5)) >>> arr array('i', [0, 1, 2, 3, 4]) >>> type(arr) <class 'array.array'> >>> array.typecodes 'bBuhHiIlLqQfd'
배열 모듈은 문자열을 반환하는 typecodes 속성을 정의합니다. 문자열의 각 문자는 C 유형 및 이에 상응하는 Python 유형을 나타내는 유형 코드를 나타냅니다.
유형 코드 | C 유형 | 파이썬 유형 |
---|---|---|
'b' | 서명된 문자 | int |
'B' | 서명되지 않은 문자 | int |
'u' | Py_UNICODE | 유니코드 문자 |
'h' | 짧게 서명 | int |
'H' | 부호 없는 약식 | int |
'i' | 서명된 정수 | int |
'나' | 부호 없는 정수 | int |
'' | 기호가 긴 | int |
'L' | 부호 없는 long | int |
'q' | 서명된 long long | int |
'Q' | 부호 없는 long long | int |
'f' | 플로트 | 플로트 |
'd' | 이중 | 플로트 |
이니셜라이저 인수는 객체와 같은 바이트일 수 있습니다. 다음 예제는 문자열의 바이트 표현에서 배열을 만듭니다.
>>> arr1 = array.array('b', b'Hello') >>> arr1 array('b', [72, 101, 108, 108, 111])
배열 클래스는 다음 메서드를 정의합니다.
array.buffer_info()
이 메서드는 현재 메모리 주소와 배열의 내용을 보관하는 데 사용되는 버퍼 요소의 길이를 제공하는 튜플(주소, 길이)을 반환합니다.
>>> arr = array.array('i', [0, 1, 2, 3, 4]) >>> arr.buffer_info() (2201141755144, 5)
카운트()
이 메서드는 배열에서 특정 요소의 발생 횟수를 반환합니다.
>>> arr = array.array('i', [0, 1, 2, 3, 4]) >>> arr.count(2) 1
확장()
이 메서드는 iterable의 항목을 배열의 끝에 추가하거나 정확히 같은 유형 코드를 가져야 하는 iterable에 추가합니다. 그렇지 않으면 TypeError가 발생합니다.
>>> arr = array.array('i', [0, 1, 2, 3, 4]) >>> arr1 = array.array('i',[10,20,30]) >>> arr.extend(arr1) >>> arr array('i', [0, 1, 2, 3, 4, 10, 20, 30])
fromfile()
이 메서드는 파일 개체에서 n개의 항목(머신 값으로)을 읽고 배열에 추가합니다.
다음 예에서는 먼저 바이너리 쓰기 모드에서 파일을 엽니다.
>>> file = open('test.txt','wb') >>> file.write(b'Hello Python') 12 >>> file.close()
이제 이 파일을 사용하여 데이터를 배열 개체에 추가합니다.
>>> a = array.array('i') >>> file = open('test.txt','rb') >>> a.fromfile(file,file.tell()) >>> a array('i', [1819043144, 2035294319, 1852794996])
추가()
이 메서드는 배열의 끝에 새 항목을 추가합니다.
fromlist()
이 메서드는 목록의 항목을 배열에 추가합니다. 이것은 목록의 x에 대해 다음과 같습니다. a.append(x)
>>> a = array.array('i') >>> a.append(10) >>> a array('i', [10]) >>> num = [20,30,40,50] >>> a.fromlist(num) >>> a array('i', [10, 20, 30, 40, 50])
삽입()
지정된 위치 이전에 배열에 새 항목 삽입
>>> a = array.array('i', [10, 20, 30, 40, 50]) >>> a.insert(2,25) >>> a array('i', [10, 20, 25, 30, 40, 50])
팝()
이 메서드는 배열에서 항목을 제거한 후 지정된 인덱스의 항목을 반환합니다.
>>> a = array.array('i', [10, 20, 30, 40, 50]) >>> x = a.pop(2) >>> x 30 >>> a array('i', [10, 20, 40, 50])
제거()
이 메소드는 배열에서 주어진 항목의 첫 번째 항목을 제거합니다.
>>> a = array.array('i', [10, 20, 30, 40, 50]) >>> a.remove(30) >>> a array('i', [10, 20, 40, 50])
토파일()
이 메서드는 쓰기 권한이 활성화된 파일 개체에 모든 항목을 씁니다.
>>> a = array.array('i', [10, 20, 30, 40, 50]) >>> file = open("test.txt","wb") >>> a.tofile(file) >>> file.close() >>> file = open("test.txt","rb") >>> file.read() b'\n\x00\x00\x00\x14\x00\x00\x00\x1e\x00\x00\x00(\x00\x00\x002\x00\x00\x00'