문제

비어 있지 않은 객체의 배열/목록을 초기화하려고합니다. 클래스 생성자는 데이터를 생성합니다. C ++ 및 Java에서는 다음과 같은 일을 할 것입니다.

Object lst = new Object[100];

나는 주위를 파고 있었지만 이것을 끝내는 피스닉 방법이 있습니까?

이것은 내가 생각했던 것처럼 작동하지 않습니다 (같은 개체에 대해 100 개의 참조를 얻습니다).

lst = [Object()]*100

그러나 이것은 내가 원하는 방식으로 작동하는 것 같습니다.

lst = [Object() for i in range(100)]

목록 이해력은 (지적으로) Java에서 매우 간단한 것에 대한 "많은"작품처럼 보입니다.

도움이 되었습니까?

해결책

암시 적으로 호출하는 방법은 없습니다 Object() C ++와 같은 배열의 각 요소에 대한 생성자 (Java에서는 새 배열의 각 요소가 초기화되어 있음을 기억하십시오. null 참조 유형).

나는 당신의 목록 이해 방법이 가장 pythonic이라고 말할 것입니다.

lst = [Object() for i in range(100)]

어휘 변수를 밟고 싶지 않다면 i, 그런 다음 파이썬의 컨벤션은 사용하는 것입니다 _ 값이 중요하지 않은 더미 변수의 경우 :

lst = [Object() for _ in range(100)]

Java의 유사한 구조와 동등한 것은 물론 사용할 수 있습니다. *:

lst = [None] * 100

다른 팁

Python의 Java Code (100 배열 생성 없는 객체에 대한 참조) :

Object arr = new Object[100];

또는 C ++ 코드 :

Object **arr = new Object*[100];

이다:

arr = [None]*100

아니다:

arr = [Object() for _ in range(100)]

두 번째는 Java와 동일합니다.

Object arr = new Object[100];
for (int i = 0; i < arr.lenght; i++) {
    arr[i] = new Object();
}

실제로 복잡한 데이터 구조를 초기화하는 Python의 기능은 Java보다 훨씬 좋습니다.


참고 : C ++ 코드 :

Object *arr = new Object[100];

Python의 목록 이해만큼 많은 작업을 수행해야합니다.

  • 100 개 객체에 대해 연속 메모리를 할당하십시오

  • 이 객체 각각에 대해 대상 :: Object ()

결과는 완전히 다른 데이터 구조 일 것입니다.

나는 목록 이해력이 가장 간단한 방법이라고 생각하지만, 당신이 그것을 좋아하지 않는다면, 당신이 원하는 것을 얻는 유일한 방법은 아닙니다. 목록. 예를 들어, itertools 분명히 할 수 있습니다 :

>>> import itertools as it
>>> lst = list(it.starmap(Object, it.repeat((), 100)))

아니면, 당신이 정말로 전통 주의자라면 map 그리고 apply:

>>> lst = map(apply, 100*[Object], 100*[()])

이것은 본질적으로 동일합니다 (개념적으로나 실제로 ;-) 인수없이 호출 할 필요가있는 대신 필요한 일의 양이 필요합니다. Object 하나의 주장으로 부름을 받아야했습니다. Object 실제로 유형이 아닌 함수였습니다.

이 작업을 수행하는 데 "목록 이해력만큼이나"가 걸릴 수 있다는 것은 놀랍게도, 모든 언어는 다른 종류의 전화에 대한 "인수에 대한 호출"을 특별히 수행해야한다고 생각하는 것 같습니다. 콜블 즈 (Callables)는이 매우 구체적인 사건에 대해 매우 중요한 것이 무엇인지 알지 못해서 다른 모든 것과 다르게 취급하는 것을 보증합니다. 그리고 결과적으로, 나는 개인적으로, 파이썬은 독특하고 이상한 치료를 위해이 사건을 단 한 번이나 짜내는 것이 아니라 다른 유사한 사용 사례와 마찬가지로 규칙적이고 쉽게 처리합니다!-)

lst = [Object() for i in range(100)]

배열은 파이썬에서 자체 일류 객체이기 때문에 이것이 당신이 찾고있는 것을 얻는 유일한 방법이라고 생각합니다. * 미친 짓을합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top