이 문서의 예에서는 Python 배열 정의 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.
Python에는 배열에 대한 데이터 구조가 없지만 목록은 다음과 같이 배열과 매우 유사합니다.
a=[0,1,2]
현재: a[0]=0, a[1]=1, a[[2]=2, 그러나 이는 다음과 같은 질문을 제기합니다. a = range(0, 1000)를 통해 구현이 가능합니다. 또는 a = range(1000)로 생략합니다. 길이가 1000인 a를 정의하고 초기 값이 모두 0인 경우 a = [0 for x in range(0, 1000)]
다음은 2차원 배열 정의:
직접 정의:
a=[[1,1],[1,1]]
이는 2*2 2차원 배열을 정의합니다. 초기값이 0인 배열입니다.
간접 정의:
a=[[0 for x in range(10)] for y in range(10)]
초기값이 0인 10*10 2차원 배열을 정의합니다.
더 간단한 리터럴 2차원 배열 방법도 있습니다.
b = [[0]*10]*10
초기값을 사용하여 10*10 2차원 배열을 정의합니다. 0.
a=[[0 for x in range(10)] for y in range(10)]와 비교: print a==b의 결과는 True입니다.
그런데 a 대신 b의 정의 방법을 사용한 후, 이전에는 정상적으로 실행될 수 있었던 프로그램도 주의 깊게 분석한 결과 차이점이 발견되었습니다.
a[0][0 ]=1 , a[0][0] 만 1이고 나머지는 모두 0입니다.
b[0][0]=1일 때 a[0][0], a[1][0], a[9,0]까지는 모두 1입니다.
이를 통해 큰 배열에 포함된 10개의 작은 1차원 데이터가 모두 동일한 참조, 즉 동일한 주소를 가리킨다는 것을 알 수 있습니다.
그래서 b = [[0]*10]*10은 기존의 2차원 배열을 따르지 않습니다.
동시에 테스트되었습니다. c=[0]*10 정의는 c=[0 for x in range(10)]와 동일한 효과를 가지며 동일한 문제는 없습니다. 위의 reference는 배열 c의 정의로 추정되는데, 이때 값 유형을 곱한 반면, 이전 b에서는 1차원 배열이 참조이므로(값 유형과 참조 유형을 빌려옴) 유형을 곱한 것으로 추정됩니다. C#에서는 이것이 적절한지 모르겠습니다).
파이썬 배열 정의 방법에 대한 자세한 소개와 관련 글은 PHP 중국어 홈페이지를 주목해주세요!