파이썬 에서 배열을 어떻게 선언 합니까?
설명서에서 배열에 대한 참조를 찾을 수 없습니다.
__getitem__
않으면 O (1)이 아닙니다.
파이썬 에서 배열을 어떻게 선언 합니까?
설명서에서 배열에 대한 참조를 찾을 수 없습니다.
__getitem__
않으면 O (1)이 아닙니다.
답변:
variable = []
이제 variable
빈 목록 *을 참조하십시오 .
물론 이것은 선언이 아니라 과제입니다. 파이썬은 동적으로 타입이 지정되기 때문에 파이썬에서 "이 변수는리스트 이외의 것을 가리켜서는 안됩니다"라고 말할 방법이 없습니다.
* 기본 내장 파이썬 타입을 배열이 아닌 list 라고합니다 . 이질적인 객체 컬렉션을 보유 할 수있는 임의 길이의 정렬 된 컨테이너입니다 (유형은 중요하지 않고 자유롭게 혼합 할 수 있음). 이것은 C 유형에 더 가까운 유형을 제공하는 array
모듈 과 혼동되어서는 안됩니다 array
. 내용은 동일해야하며 (동일한 유형) 길이는 여전히 동적입니다.
variable = ["Hi", "Hello"];
?)
my_2x2_list = [[a, b], [c, d]]
. 다차원 배열이 필요한 것에 따라을 사용하는 것도 고려할 numpy
수 있습니다.
이것은 파이썬에서 놀랍도록 복잡한 주제입니다.
배열은 클래스로 표시됩니다 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
작업이 비싸다이 멋진 작업 테이블 복잡성을 확인하십시오 .
또한이 그림을 참조하십시오. 여기서 배열, 참조 배열 및 링크 된 목록 간의 가장 중요한 차이점을 보여 주려고했습니다.
[1, 2, 3, 4, 5, 6, 7, 8, 9][1:-2]
[2, 3, 4, 5, 6, 7]
a == b[:2]
의 처음 두 요소 가 배열 a 의 값과 같으면 True를 반환 합니다.
실제로 선언하지는 않지만 파이썬에서 배열을 만드는 방법입니다.
from array import array
intarray = array('i')
자세한 내용은 배열 모듈을 참조하십시오 : http://docs.python.org/library/array.html
이제 배열을 원하지 않고 목록을 원하지만 다른 사람들이 이미 대답했습니다. :)
list
. 파이썬은 array
C 배열과 비슷하고 거의 사용되지 않는 특별한 목적의 데이터 유형을 가지고 있습니다.
처음 30 개의 셀이 이미 채워진 목록을 원한다고 생각합니다. 그래서
f = []
for i in range(30):
f.append(0)
이것을 사용할 수있는 예는 피보나치 순서입니다. 프로젝트 오일러의 문제 2 참조
f = [0] * 30
대신 시도하십시오 .
방법은 다음과 같습니다.
my_array = [1, 'rebecca', 'allard', 15]
계산을 위해 다음 과 같이 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와 비슷합니다.
JohnMachin의 의견 은 실제 답변이되어야합니다. 다른 모든 대답은 내 의견으로는 해결 방법입니다! 그래서:
array=[0]*element_count
x=[[0] * 10] * 10
몇 가지 기여는 파이썬의 배열이 목록으로 표현된다고 제안했습니다. 이것은 올바르지 않습니다. 파이썬은 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 ()는 순서가 동일한 동종 시퀀스이지만 목록은 비 균일 시퀀스입니다.
파이썬에서는 아무것도 선언하지 않습니다. 당신은 그것을 사용합니다. http://diveintopython.net 과 같은 것으로 시작하는 것이 좋습니다 .
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 : list 인덱스가 부동 소수점이 아닌 정수 여야 함"을 방지 할 수 있습니다. 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]를 포함한다. 따라서 배열의 존재를 무시하는 것은 전적으로 실행 가능하고 합리적입니다. 어떤 식 으로든 우리 대부분을 방해해서는 안됩니다. :디
나는 문자열 배열을 가지고 있었고 True로 시작된 동일한 길이의 부울 배열이 필요했습니다. 이것이 내가 한 일입니다
strs = ["Hi","Bye"]
bools = [ True for s in strs ]
int count[26]={0};
있습니다. 아마도 더 좋은 방법이 있지만 bools
위의 변형이 count=[0 for ii in range(26)]
나중에 작동 하여 count=[0]*26
선호하는 것으로 변경했습니다 .
리스트를 생성하여 배열로 변환하거나 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)