programing

Python에서 고정 크기의 배열 초기화

copyandpastes 2022. 11. 8. 21:42
반응형

Python에서 고정 크기의 배열 초기화

값이 입력되지 않은 어레이(또는 목록)를 정의된 크기로 초기화하려면 어떻게 해야 하는지 알고 싶습니다.

예를 들어 C:

int x[5]; /* declared without adding elements*/

Python에서는 어떻게 하면 좋을까요?

다음을 사용할 수 있습니다.

>>> lst = [None] * 5
>>> lst
[None, None, None, None, None]

왜 이 질문들은 명백한 답변으로 대답되지 않는가?

a = numpy.empty(n, dtype=object)

그러면 객체를 저장할 수 있는 길이n의 배열이 생성됩니다.크기를 변경하거나 추가할 수 없습니다.특히 길이 패딩으로 공간을 낭비하지 않습니다.이것은 자바와 동등한 Python입니다.

Object[] a = new Object[n];

성능 및 공간에 관심이 있고 어레이에 특정 숫자 유형만 저장된다는 것을 알고 있는 경우 dtype 인수를 int와 같은 다른 값으로 변경할 수 있습니다.그런 다음 numpy는 어레이 참조를 객체로 만들지 않고 이러한 요소를 어레이에 직접 패키지합니다.

다음을 수행합니다.

>>> d = [ [ None for y in range( 2 ) ] for x in range( 2 ) ]
>>> d
[[None, None], [None, None]]
>>> d[0][0] = 1
>>> d
[[1, None], [None, None]]

다른 해결책으로 인해 다음과 같은 문제가 발생합니다.

>>> d = [ [ None ] * 2 ] * 2
>>> d
[[None, None], [None, None]]
>>> d[0][0] = 1
>>> d
[[1, None], [1, None]]

가장 좋은 방법은 numpy 라이브러리를 이용하는 것이다.

from numpy import ndarray

a = ndarray((5,),int)
>>> import numpy
>>> x = numpy.zeros((3,4))
>>> x
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])
>>> y = numpy.zeros(5)   
>>> y
array([ 0.,  0.,  0.,  0.,  0.])

x는 2-d 배열이고 y는 1-d 배열입니다.둘 다 0으로 초기화됩니다.

쉬운 해결책은x = [None]*length단, 모든 목록 요소가 초기화됩니다.None사이즈가 정말 고정적이면 할 수 있어요.x=[None,None,None,None,None]뿐만 아니라.하지만 엄밀히 말하면, 어떤 식으로든 정의되지 않은 요소를 얻을 수 없습니다. 왜냐하면 이 전염병은 Python에는 존재하지 않기 때문입니다.

>>> n = 5                     #length of list
>>> list = [None] * n         #populate list, length n with n entries "None"
>>> print(list)
[None, None, None, None, None]

>>> list.append(1)            #append 1 to right side of list
>>> list = list[-n:]          #redefine list as the last n elements of list
>>> print(list)
[None, None, None, None, 1]

>>> list.append(1)            #append 1 to right side of list
>>> list = list[-n:]          #redefine list as the last n elements of list
>>> print(list)
[None, None, None, 1, 1]

>>> list.append(1)            #append 1 to right side of list
>>> list = list[-n:]          #redefine list as the last n elements of list
>>> print(list)
[None, None, 1, 1, 1]

또는, 리스트에는 아무것도 기재되어 있는 것이 거의 없습니다.

>>> n = 5                     #length of list
>>> list = []                 # create list
>>> print(list)
[]

>>> list.append(1)            #append 1 to right side of list
>>> list = list[-n:]          #redefine list as the last n elements of list
>>> print(list)
[1]

append의 4번째 반복 시:

>>> list.append(1)            #append 1 to right side of list
>>> list = list[-n:]          #redefine list as the last n elements of list
>>> print(list)
[1,1,1,1]

5 및 그 이후의 모든 것:

>>> list.append(1)            #append 1 to right side of list
>>> list = list[-n:]          #redefine list as the last n elements of list
>>> print(list)
[1,1,1,1,1]

디스크립터를 사용하여 크기를 제한할 수 있습니다.

class fixedSizeArray(object):
    def __init__(self, arraySize=5):
        self.arraySize = arraySize
        self.array = [None] * self.arraySize

    def __repr__(self):
        return str(self.array)

    def __get__(self, instance, owner):
        return self.array

    def append(self, index=None, value=None):
        print "Append Operation cannot be performed on fixed size array"
        return

    def insert(self, index=None, value=None):
        if not index and index - 1 not in xrange(self.arraySize):
            print 'invalid Index or Array Size Exceeded'
            return
        try:
            self.array[index] = value
        except:
            print 'This is Fixed Size Array: Please Use the available Indices'


arr = fixedSizeArray(5)
print arr
arr.append(100)
print arr
arr.insert(1, 200)
print arr
arr.insert(5, 300)
print arr

출력:

[None, None, None, None, None]
Append Operation cannot be performed on fixed size array
[None, None, None, None, None]
[None, 200, None, None, None]
This is Fixed Size Array: Please Use the available Indices
[None, 200, None, None, None]

예를 들어 빈 문자열 배열을 원하는 크기로 설정하는 것이 간단합니다.

코드:

import numpy as np

x= np.zeros(5,str)
print x

출력:

['' '' '' '' '']

이것이 도움이 되기를 바랍니다:)

저는 샘플 프로그램과 그 출력물을 게시하여 당신을 돕고 싶습니다.

프로그램:

t = input("")
x = [None]*t
y = [[None]*t]*t

for i in range(1, t+1):
    x[i-1] = i;

    for j in range(1, t+1):
        y[i-1][j-1] = j;

print x
print y

출력:-

2
[1, 2]
[[1, 2], [1, 2]]

나는 이것으로 그들의 선언에 대한 당신의 매우 기본적인 개념이 명확해졌으면 좋겠다.다른 특정 값으로 초기화하려면 예를 들어 다음과 같이 초기화합니다.0..다음과 같이 선언할 수 있습니다.

x = [0]*10

도움이 되길..!;)

바이트로 작업하는 경우 기본 제공 기능을 사용할 수 있습니다.bytearray다른 일체형으로 작업하고 있는 경우는, 빌트인을 참조해 주세요.array.

「 「 」는, 「 」라고 것을 으로 이해해 주세요.list 아니다array.

예를 들어 파일 내용을 읽기 위한 버퍼를 작성하려는 경우 다음과 같이 byearray를 사용할 수 있습니다(더 나은 방법이 있지만 예는 유효합니다).

with open(FILENAME, 'rb') as f:
    data = bytearray(os.path.getsize(FILENAME))
    f.readinto(data)

에서는, 「」를 해 주세요.bytearray는 고정 인 '메모리'로 되어 있습니다.FILENAME 단위).이 사전 할당을 통해 버퍼 프로토콜을 사용하여 어레이 복사본 없이 파일을 더 효율적으로 가변 버퍼로 읽을 수 있습니다.아직 더 나은 방법이 있지만 이것이 당신의 질문에 대한 하나의 답을 제공한다고 생각합니다.

언급URL : https://stackoverflow.com/questions/6142689/initialising-an-array-of-fixed-size-in-python

반응형