파이썬에서 어떤 크기의 빈 배열을 어떻게 얻습니까?


120

기본적으로 C에서 이와 동등한 파이썬을 원합니다.

int a[x];

하지만 파이썬에서는 다음과 같은 배열을 선언합니다.

a = []

문제는 다음과 같은 값으로 임의의 슬롯을 할당하고 싶다는 것입니다.

a[4] = 1

그러나 배열이 비어 있기 때문에 파이썬으로는 할 수 없습니다.

답변:


239

"배열"이 실제로 Python 목록을 의미하는 경우 다음을 사용할 수 있습니다.

a = [0] * 10

또는

a = [None] * 10

91
주의해야 할 한 가지는 a = [obj] * N배열의 각 요소에 동일한 obj가 나타납니다. 변경 가능한 obj이고 하나의 항목을 수정하면 모두 변경됩니다. ...하지만 정수 (또는 다른 불변 유형)를 사용하는이 예에서는 차이가 없습니다. 또는 요소에 할당 만하면 문제가되지 않습니다. (정확히 그렇게 자주했기 때문에 언급합니다. :))
dappawit 2011 년

4
그것은 저의 첫 번째 Python 프로젝트 @dappawit에서 저를 힘들게 했습니다. 이 경고에주의하십시오.
The Nate

객체에 대한 동일한 참조를 생성합니다
Amr Alaa

22

파이썬에서 원하는 것을 정확히 할 수는 없습니다 (내가 올바르게 읽었다면). 목록의 각 요소에 대한 값을 입력해야합니다 (또는 배열이라고 부르는대로).

그러나 이것을 시도하십시오.

a = [0 for x in range(N)]  # N = size of list you want
a[i] = 5  # as long as i < N, you're okay

다른 유형 목록의 None경우 0 이외의 것을 사용하십시오. 종종 좋은 선택입니다.


2
이 대답은 잘못된 것입니다. range(N)Python이 3.0 미만이면 이미 목록을 생성합니다.
Apalala 2011 년

1
사실, 목록을 생성합니다. 효율성이 걱정된다면 xrange(N)Python 2.x에서 사용할 수 있습니다 . 그러나 나는 그것이 잘못된 것과 어떻게 접하고 있는지 잘 모르겠습니다. a = range(N)모든 요소가 합리적인 "기본값"에서 시작 하기 때문에 선호합니다 . 의견의 문제라고 생각합니다.
dappawit 2011 년

16

numpy를 사용할 수 있습니다.

import numpy as np

빈 배열의 예 :

np.empty([2, 2])
array([[ -9.74499359e+001,   6.69583040e-309],
       [  2.13182611e-314,   3.06959433e-309]])  

7

목록을 선언하고 각 요소를 추가하기 만하면됩니다. 예 :

a = []
a.append('first item')
a.append('second item')

5
그런 다음 어떻게 '무작위 슬롯 할당'
Tdelang

5

또한 목록의 확장 방법으로 확장 할 수 있습니다.

a= []
a.extend([None]*10)
a.extend([None]*20)

1

당신 (또는이 질문의 다른 검색 자)이 실제로 정수로 채우기 위해 연속 배열을 만드는 데 관심이 있다면 bytearraymemoryivew를 고려 하십시오 .

# cast() is available starting Python 3.3
size = 10**6 
ints = memoryview(bytearray(size)).cast('i') 

ints.contiguous, ints.itemsize, ints.shape
# (True, 4, (250000,))

ints[0]
# 0

ints[0] = 16
ints[0]
# 16

1
x=[]
for i in range(0,5):
    x.append(i)
    print(x[i])

2
이 코드가 문제를 해결할 수 있지만, 이것이 문제를 해결하는 방법과 이유에 대한 설명포함 하여 게시물의 품질을 향상시키는 데 실제로 도움이 될 것이며 아마도 더 많은 찬성표를 얻게 될 것입니다. 지금 질문하는 사람뿐만 아니라 미래에 독자를 위해 질문에 답하고 있다는 것을 기억하십시오. 제발 편집 설명을 추가하고 제한 및 가정이 적용 무엇의 표시를 제공하는 답변을.
Daniil

0

실제로 C 스타일 배열을 원한다면

import array
a = array.array('i', x * [0])
a[3] = 5
try:
   [5] = 'a'
except TypeError:
   print('integers only allowed')

파이썬에는 초기화되지 않은 변수의 개념이 없습니다 . 변수는 값에 바인딩 된 이름이므로 해당 값에는 무언가가 있어야합니다. 위의 예에서 배열은 0으로 초기화됩니다.

그러나 실제로 저수준 항목에 필요하지 않는 한 이것은 파이썬에서 흔하지 않습니다. 대부분의 경우 다른 답변에서 알 수 있듯이 빈 목록 또는 빈 numpy 배열을 사용하는 것이 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.