반응형
파이썬에서 중첩 목록을 만드는 방법은 무엇인가요?
다음과 같이 파이썬에서 쉽게 중첩된 목록을 만들 수 있다는 것을 알고 있습니다:
[[1,2],[3,4]]
그러나 어떻게 3x3x3 0 행렬을 만들 수 있을까?
[[[0] * 3 for i in range(0, 3)] for j in range (0,3)]
또는
[[[0]*3]*3]*3
뭔가 잘못된 것 같아요. 치수 목록을 메소드에 전달하는 것만으로 작성할 수 있는 방법은 없습니까? 예:
CreateArray([3,3,3])
곱셈 구문만 네스트하면 됩니다:
[[[0] * 3] * 3] * 3
따라서 이 연산을 표현하는 것은 간단합니다
def zeros(dimensions):
return reduce(lambda x, d: [x] * d, [0] + dimensions)
또는 참조 복제를 방지하려면 한 항목을 변경해도 다른 항목에는 영향을 미치지 않으므로 복사본을 사용해야 합니다:
import copy
def zeros(dimensions):
item = 0
for dimension in dimensions:
item = map(copy.copy, [item] * dimension)
return item
NumPy는 이 문제를 해결합니다
>>> a = array( [2,3,4] )
>>> a
array([2, 3, 4])
>>> type(a)
<type 'numpy.ndarray'>
그러나 파이썬 네이티브 목록을 행렬로 사용하려면 다음과 같은 도움말 방법이 유용할 수 있습니다:
import copy
def Create(dimensions, item):
for dimension in dimensions:
item = map(copy.copy, [item] * dimension)
return item
def Get(matrix, position):
for index in position:
matrix = matrix[index]
return matrix
def Set(matrix, position, value):
for index in position[:-1]:
matrix = matrix[index]
matrix[position[-1]] = value
만약 행렬이 실제로 당신이 찾고 있는 것이라면, numpy 패키지를 생각해 보세요.
http://docs.scipy.org/doc/numpy/reference/generated/numpy.zeros.html#numpy.zeros
이렇게 하면 3x3x3의 0 배열을 얻을 수 있습니다:
numpy.zeros((3,3,3))
또한 과학적 컴퓨팅을 위해 제작된 모듈의 편리한 기능을 활용할 수 있습니다.
목록 이해는 목록 초기화에 표현력을 추가하기 위한 통사적 당이다. 당신의 경우, 나는 그것들을 전혀 사용하지 않고 단순한 중첩 루프를 사용할 것이다.
완전히 다른 레벨에서: 목록을 사용하여 다차원 행렬을 구현할 수 있지만, 그 목표에 가장 적합한 도구는 아니라고 생각합니다.
또는 정의된 네스트 함수를 반복 도구 모듈의 repeat (0)과 함께 사용합니다:
nest(itertools.repeat(0),[3,3,3])
반응형
'개발하자' 카테고리의 다른 글
파이썬에서 문자열의 문자열 대체 필드를 구문 분석하는 방법? (2) | 2023.08.28 |
---|---|
Python에서 두 개의 목록에서 목록 만들기(네스팅) (0) | 2023.08.27 |
파일의 썸네일을 보여주기 위해 플러터를 사용하여 PDF를 이미지로 변환할 수 있습니까? (0) | 2023.08.26 |
Terraform은 컨테이너 정의에 대해 기본 매개 변수를 사용하여 새로운 리소스/강제 교체를 계속 강제합니다 (0) | 2023.08.25 |
쿠버네티스 포드 간에 스토리지를 공유하는 방법은 무엇인가요? (1) | 2023.08.25 |