, 난, 난 그냥 .. 같은 일부 항목을 추가하거나보다, 내가 목록을 선언 할 수 있다는 사실을 알고 ... 같은 파이썬에서python으로 픽스 크기 목록을 만드는 방법은 무엇입니까? C++에서
int* a = new int[10];
을 배열을 만들 수 있습니다
l = [1,2,3,4]
l = range(10)
C++과 같이 지정된 크기로 목록을 초기화 할 수 있습니까?
, 난, 난 그냥 .. 같은 일부 항목을 추가하거나보다, 내가 목록을 선언 할 수 있다는 사실을 알고 ... 같은 파이썬에서python으로 픽스 크기 목록을 만드는 방법은 무엇입니까? C++에서
int* a = new int[10];
을 배열을 만들 수 있습니다
l = [1,2,3,4]
l = range(10)
C++과 같이 지정된 크기로 목록을 초기화 할 수 있습니까?
(TL; DR :. 귀하의 질문에 대한 정확한 답은 numpy.empty
또는 numpy.empty_like
이지만, 가능성이 상관하지 않고 myList = [None]*10000
을 사용하여 멀리 얻을 수 있습니다)
당신 모든 동일한 요소에 대한 목록을 초기화 할 수 있습니다. 의미 적으로 비 숫자 값을 사용하는 것이 의미가 있는지 여부 (나중에 사용하면 오류가 발생합니다. 좋은 점) 또는 0과 유사합니다 (비정상적입니까? 희소 행렬을 작성하는 경우 유용 할 수 있습니다.) 기본 '값이 0이어야하며 당신이 버그에 대해 걱정하지 않은 당신에게 달려있다 :
이>>> [None for _ in range(10)]
[None, None, None, None, None, None, None, None, None, None]
(여기서 _
, 당신은 i
그냥 변수 이름을 사용할 수도있다)
당신도 할 수 있습니다. 이렇게하시오.
>>> [None]*10
[None, None, None, None, None, None, None, None, None, None]
이것을 최적화 할 필요가 없습니다. 간단한 방법
최선의
>>> x = []
>>> for i in range(10):
>>> x.append(i)
>>> def initAndWrite_test():
... x = [None]*10000
... for i in range(10000):
... x[i] = i
...
>>> def initAndWrite2_test():
... x = [None for _ in range(10000)]
... for i in range(10000):
... x[i] = i
...
>>> def appendWrite_test():
... x = []
... for i in range(10000):
... x.append(i)
결과 : 파이썬 3.2
>>> import timeit
>>> for f in [initAndWrite_test, initAndWrite2_test, appendWrite_test]:
... print('{} takes {} usec/loop'.format(f.__name__, timeit.timeit(f, number=1000)*1000))
...
initAndWrite_test takes 714.596033096 usec/loop
initAndWrite2_test takes 981.526136398 usec/loop
appendWrite_test takes 908.597946167 usec/loop
결과 :
initAndWrite_test takes 641.3581371307373 usec/loop
initAndWrite2_test takes 1033.6499214172363 usec/loop
appendWrite_test takes 895.9040641784668 usec/loop
우리가 볼 수 있듯이, 그것은 모두 python2에서 관용구 [None]*10000
을 할 가능성이 더와 python3.그러나 할당보다 복잡한 작업 (목록의 모든 요소를 생성하거나 처리하는 작업이 복잡함)을 수행하면 오버 헤드가 의미없는 비용의 일부가됩니다. 즉, 이러한 최적화는 목록의 요소에 대해 합리적인 조치를 취하는 경우에 대해 조기에 걱정할 것입니다. 그들은 그 과정에서 뭔가 쓰는 메모리를 통해 이동하기 때문에
이 모든 그러나 비효율적이다. C에서는 초기화되지 않은 배열이 임의의 가비지 메모리 (시스템에서 다시 할당 된 sidenote : 프로그램을 닫을 때 실수로 메모리를 할당하거나 실패 할 때 security risk이 될 수 있음)로 채워집니다. . C 언어의 제작자는 자동으로 메모리를 초기화하지 않는 것이 더 좋을 것이라고 생각했습니다. 올바른 선택이었습니다.
이것은 (예 : O(N)
이기 때문에) 점근 속도 향상이 아니지만, 예를 들어 실제로 신경 쓰는 물건으로 덮어 쓰기 전에 전체 메모리 블록을 먼저 초기화 할 필요는 없습니다. 가능하다면 (의사 코드) x = list(size=10000)
과 같습니다.
파이썬에서 비슷한 것을 원하면 numpy
숫자 행렬/N 차원 배열 조작 패키지를 사용할 수 있습니다. 구체적으로, numpy.empty
또는 numpy.empty_like
귀하의 질문에 대한 진정한 답변입니다.
'_'은 범위를 반복 할 때 정말로 필요하지 않은 변수의 "멍청한"이름일까요? 나는'for range (10)'가 때때로 쓰여지기를 바란다. –
'x = [[None]] * 10'은 "wrong"입니다. 'x [0] .append (1)'을 시도해보고 그 마법을 보아라. –
@ Death-Stalker : 네, 저는 그것이 실제로 지적하고 설명하려고 시도한 것입니다 ("변경 가능한 객체로 작업하기"). 하지만 고맙습니다. 내 대답이 몹시 말로 표현되어 있다는 것을 깨닫게 해준 것 같습니다. 결정된. – ninjagecko
이렇게 목록을 초기화하는 것은 실제로 python 방식이 아닙니다. 어쨌든 다음과 같이 목록을 초기화 할 수 있습니다.
>>> l = [None] * 4
>>> l
[None, None, None, None]
파이썬에는이 기능을 지원하는 기능이 내장되어 있지 않습니다. 내가 추가하는 것이 오버 헤드가 많은 을 추가 할 것이라고 생각하지 않을 정도로 실제로 최적화해야합니까?
그러나 l = [None] * 1000
과 같은 작업을 수행 할 수 있습니다.
또는 발전기를 사용할 수 있습니다.
맞아요. 파이썬의 메모리 관리에 익숙하지 않아 마음이 바뀔 것입니다. 감사합니다 ~ – wtm
your_list = [None]*size_required
[None] * 10
을 사용할 수 있습니다. 그러나 이것은 "고정 된 크기"가 아니며 추가, 제거 할 수 있습니다 ... 이것은 목록이 만들어지는 방법입니다.
너비를 고정하려면 튜플 (tuple([None] * 10)
)으로 만들 수 있지만 다시 변경할 수는 없습니다 (저장된 항목이 변경 가능한 경우에만 모든 경우가 아님).
요구 사항에 더 가까운 또 다른 옵션은 목록이 아니고 최대 길이가 collections.deque
입니다. 최대 크기이지만 크기는 더 작을 수 있습니다.
그러나 목록을 사용하고 일을하는 "pythonic"방식에 익숙해집니다.
참고 또한 C++에서 배열을 사용할 때 파이썬에서 다른 방법으로 해결된다 다소 다른 요구했다 수도 있음 :
파이썬 다른 깔끔한 것들 중에서 공지 된 크기의 배열를 제작하는 방법이, NumPy 의해 배열의 필요성을 해결한다 :
from numpy import *
l = zeros(10)
'from numpy import * '를 사용하면 파이썬 내장 함수 인'all','abs','min','max','sum','any'와'round'를 numpy에 해당하는 것으로 숨길 수 있습니다. 당신이 원하는. –
예,'numpy' 모듈에는 상당히 많은 이름이 포함되어 있습니다 (그럼에도 불구하고 배열 코드를 작성할 때 모듈 네임 스페이스에 두는 것이 편리합니다). 가능한 이름 충돌이 문제를 일으키는 경우 정규화 된 가져 오기를 사용하십시오. – ulidtko
fix_array = numpy.empty(n, dtype = object)
n은 배열의 크기가
이긴하지만이 목적을 위해 라이브러리를 가져와야하므로 최선의 방법은 아닙니다. 희망이 도움이!
파이썬으로 목록을 선언하려면 _do_ _not_ _need_를 사용해야합니다. _want_ _to_ _use_ 할 때 초기화하십시오. – ronakg
맞아, 왜 지구상에 필요한거야? – 0605002
Python은 C++이 아닙니다. 당신은 정말로 당신이 생각하는 방식을 바꿀 필요가있다. 파이썬에서 고정 된 크기를 선언 할 필요가 없다. – WeaselFox