Programming

파이썬에서 배열을 선언하는 방법?

procodes 2020. 2. 17. 22:27
반응형

파이썬에서 배열을 선언하는 방법?


파이썬 에서 배열을 어떻게 선언 합니까?

설명서에서 배열에 대한 참조를 찾을 수 없습니다.


variable = []

이제 variable빈 목록 *을 참조하십시오 .

물론 이것은 선언이 아니라 과제입니다. 파이썬은 동적으로 타입이 지정되기 때문에 파이썬에서 "이 변수는리스트 이외의 것을 가리켜서는 안됩니다"라고 말할 방법이 없습니다.


* 기본 내장 파이썬 타입을 배열이 아닌 list 라고합니다 . 이질적인 객체 컬렉션을 보유 할 수있는 임의 길이의 정렬 된 컨테이너입니다 (유형은 중요하지 않고 자유롭게 혼합 할 수 있음). 이것은 C 유형에 더 가까운 유형을 제공하는 array모듈 과 혼동되어서는 안됩니다 array. 내용은 동일해야하며 (동일한 유형) 길이는 여전히 동적입니다.


실제로 선언하지는 않지만 파이썬에서 배열을 만드는 방법입니다.

from array import array
intarray = array('i')

자세한 내용은 배열 모듈을 참조하십시오 : http://docs.python.org/library/array.html

이제 배열을 원하지 않고 목록을 원하지만 다른 사람들이 이미 대답했습니다. :)


이것은 파이썬에서 놀랍도록 복잡한 주제입니다.

실용 답변

배열은 클래스로 표시됩니다 list(참조 참조generator 와 혼합하지 마십시오 ).

사용 예를 확인하십시오.

# empty array
arr = [] 

# init with values (can contain mixed types)
arr = [1, "eels"]

# get item by index (can be negative to access end of array)
arr = [1, 2, 3, 4, 5, 6]
arr[0]  # 1
arr[-1] # 6

# get length
length = len(arr)

# supports append and insert
arr.append(8)
arr.insert(6, 7)

이론적 답변

기본적으로 파이썬 list은 항목에 대한 참조를 포함하는 실제 배열의 래퍼입니다. 또한 기본 배열은 약간의 추가 공간으로 생성됩니다.

이것의 결과는 다음과 같습니다.

  • 랜덤 액세스는 정말 저렴합니다 ( arr[6653]와 동일 arr[0])
  • append 추가 공간이있는 동안 작업은 '무료'입니다
  • insert 작업이 비싸다

멋진 작업 테이블 복잡성을 확인하십시오 .

또한이 그림을 참조하십시오. 여기서 배열, 참조 배열 및 링크 된 목록 간의 가장 중요한 차이점을 보여 주려고했습니다. 배열, 어디서나 배열


처음 30 개의 셀이 이미 채워진 목록을 원한다고 생각합니다. 그래서

   f = []

   for i in range(30):
       f.append(0)

이것을 사용할 수있는 예는 피보나치 순서입니다. 프로젝트 오일러의 문제 2 참조


방법은 다음과 같습니다.

my_array = [1, 'rebecca', 'allard', 15]

파이썬에서는 아무것도 선언하지 않습니다. 당신은 그것을 사용합니다. http://diveintopython.net 과 같은 것으로 시작하는 것이 좋습니다 .


몇 가지 기여는 파이썬의 배열이 목록으로 표현된다고 제안했습니다. 이것은 올바르지 않습니다. 파이썬은 array()표준 라이브러리 모듈 array" array.array()" 독립적으로 구현 되어 있으므로 혼동하는 것은 잘못입니다. 리스트는 파이썬으로 된리스트이므로 사용 된 명명법에주의하십시오.

list_01 = [4, 6.2, 7-2j, 'flo', 'cro']

list_01
Out[85]: [4, 6.2, (7-2j), 'flo', 'cro']

list와 사이에는 매우 중요한 차이점이 array.array()있습니다. 이 두 객체 모두 순서가 배열 된 반면, array.array ()는 순서가 동일한 동종 시퀀스이지만 목록은 비 균일 시퀀스입니다.


계산을 위해 다음 과 같이 numpy 배열을 사용 하십시오.

import numpy as np

a = np.ones((3,2))        # a 2D array with 3 rows, 2 columns, filled with ones
b = np.array([1,2,3])     # a 1D array initialised using a list [1,2,3]
c = np.linspace(2,3,100)  # an array with 100 points beteen (and including) 2 and 3

print(a*1.5)  # all elements of a times 1.5
print(a.T+b)  # b added to the transpose of a

이 numpy 배열은 디스크에서 저장 및로드 할 수 있으며 (압축 된 경우에도) 대량의 요소를 사용한 복잡한 계산은 C와 비슷합니다.

과학적인 환경에서 많이 사용됩니다. 자세한 내용은 여기참조 하십시오 .


나는 보통 a = [1,2,3]실제로 할 list것이지만 arrays이 공식적인 정의살펴보십시오.


Lennart의 답변에 추가하기 위해 다음과 같이 배열을 만들 수 있습니다.

from array import array
float_array = array("f",values)

여기서 은 튜플, 목록 또는 np.array의 형식을 취할 수 있지만 배열은 할 수 없습니다.

values = [1,2,3]
values = (1,2,3)
values = np.array([1,2,3],'f')
# 'i' will work here too, but if array is 'i' then values have to be int
wrong_values = array('f',[1,2,3])
# TypeError: 'array.array' object is not callable

출력은 여전히 ​​동일합니다.

print(float_array)
print(float_array[1])
print(isinstance(float_array[1],float))

# array('f', [1.0, 2.0, 3.0])
# 2.0
# True

list에 대한 대부분의 메소드는 배열에서도 작동하며 일반적인 메소드는 pop (), extend () 및 append ()입니다.

답변과 의견으로 판단하면 배열 데이터 구조가 그렇게 대중적이지 않은 것으로 보입니다. 그래도 목록보다 튜플을 선호하는 것과 같은 방식으로 좋아합니다.

배열 구조에는 목록 또는 np.array보다 엄격한 규칙이 있으므로 특히 숫자 데이터로 작업 할 때 오류를 줄이고 디버깅을 더 쉽게 할 수 있습니다.

float를 int 배열에 삽입 / 추가하려고 시도하면 TypeError가 발생합니다.

values = [1,2,3]
int_array = array("i",values)
int_array.append(float(1))
# or int_array.extend([float(1)])

# TypeError: integer argument expected, got float

따라서 배열 형식에서 정수 (예 : 인덱스 목록)로 유지되는 값을 유지하면 "TypeError : 목록 인덱스는 부동 소수점이 아닌 정수 여야합니다"를 방지 할 수 있습니다. np.array 및 list와 유사하게 배열을 반복 할 수 있기 때문입니다.

int_array = array('i',[1,2,3])
data = [11,22,33,44,55]
sample = []
for i in int_array:
    sample.append(data[i])

짜증나게, int를 float 배열에 추가하면 예외를 던지지 않고 int가 float가됩니다.

np.array는 항목에 대해 동일한 데이터 유형을 유지하지만 오류를 제공하는 대신 새 항목에 맞게 데이터 유형을 변경합니다 (일반적으로 double 또는 str).

import numpy as np
numpy_int_array = np.array([1,2,3],'i')
for i in numpy_int_array:
    print(type(i))
    # <class 'numpy.int32'>
numpy_int_array_2 = np.append(numpy_int_array,int(1))
# still <class 'numpy.int32'>
numpy_float_array = np.append(numpy_int_array,float(1))
# <class 'numpy.float64'> for all values
numpy_str_array = np.append(numpy_int_array,"1")
# <class 'numpy.str_'> for all values
data = [11,22,33,44,55]
sample = []
for i in numpy_int_array_2:
    sample.append(data[i])
    # no problem here, but TypeError for the other two

과제도 마찬가지입니다. 데이터 유형이 지정되면 np.array는 가능하면 항목을 해당 데이터 유형으로 변환합니다.

int_numpy_array = np.array([1,2,float(3)],'i')
# 3 becomes an int
int_numpy_array_2 = np.array([1,2,3.9],'i')
# 3.9 gets truncated to 3 (same as int(3.9))
invalid_array = np.array([1,2,"string"],'i')
# ValueError: invalid literal for int() with base 10: 'string'
# Same error as int('string')
str_numpy_array = np.array([1,2,3],'str')
print(str_numpy_array)
print([type(i) for i in str_numpy_array])
# ['1' '2' '3']
# <class 'numpy.str_'>

또는 본질적으로 :

data = [1.2,3.4,5.6]
list_1 = np.array(data,'i').tolist()
list_2 = [int(i) for i in data]
print(list_1 == list_2)
# True

배열은 단순히 다음을 제공합니다.

invalid_array = array([1,2,3.9],'i')
# TypeError: integer argument expected, got float

이 때문에 유형별 명령에 np.array를 사용하는 것은 좋지 않습니다. 배열 구조는 여기서 유용합니다. list는 값의 데이터 유형을 유지합니다.

그리고 다소 성가신 것을 발견했습니다 : 데이터 유형은 array ()의 첫 번째 인수로 지정되지만 (보통) np.array ()의 두 번째 인수로 지정됩니다. : |

C와의 관계는 여기에서 참조됩니다 : Python List vs. Array-언제 사용합니까?

탐험 재미있게 보내십시오!

참고 : 배열의 타이핑되고 엄격한 특성은 파이썬보다는 C에 더 의존하며, 파이썬은 기능상 많은 유형별 제약을 갖지 않습니다. 그것의 인기는 또한 공동 작업에서 긍정적 인 피드백을 만들어 내고 그것을 대체하는 것은 대체로 추가적인 파일 [int (x) for x]를 포함한다. 따라서 배열의 존재를 무시하는 것은 전적으로 실행 가능하고 합리적입니다. 어떤 식 으로든 우리 대부분을 방해해서는 안됩니다. :디


이건 어때...

>>> a = range(12)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
>>> a[7]
6

JohnMachin의 의견 은 실제 답변이되어야합니다. 다른 모든 대답은 내 의견으로는 해결 방법입니다! 그래서:

array=[0]*element_count

Lennart에 이어 균질 한 다차원 배열을 구현하는 numpy있습니다.


파이썬은 그것들을 리스트 라고 부릅니다 . 대괄호와 쉼표로 목록 리터럴을 작성할 수 있습니다.

>>> [6,28,496,8128]
[6, 28, 496, 8128]

나는 문자열 배열을 가지고 있었고 True로 시작된 동일한 길이의 부울 배열이 필요했습니다. 이것이 내가 한 일입니다

strs = ["Hi","Bye"] 
bools = [ True for s in strs ]

리스트를 생성하여 배열로 변환하거나 numpy 모듈을 사용하여 배열을 생성 할 수 있습니다. 아래는 동일한 설명을위한 몇 가지 예입니다. Numpy는 또한 다차원 배열로 작업하기가 더 쉽습니다.

import numpy as np
a = np.array([1, 2, 3, 4])

#For custom inputs
a = np.array([int(x) for x in input().split()])

행렬의 크기로 입력을받는 형태 변경 기능을 사용하여이 배열을 2X2 행렬로 재구성 할 수도 있습니다.

mat = a.reshape(2, 2)

참고 URL : https://stackoverflow.com/questions/1514553/how-to-declare-an-array-in-python

반응형