2013-04-24 5 views
-2

유효한 목록 색인이고 값이 목록의 항목 인 사전으로 모든 목록을 나타낼 수 있습니다. 예 : [5, 6, 'a']{0:5, 1:6, 2:'a'}으로 표시됩니다.메모리가 문제가되지 않을 때`list`를`dict` 할 수 있습니까?

점근 시간과 메모리 복잡성의 관점에서 dict 표현은 list과 동일합니다. list은 상수 요인으로 메모리를 적게 사용합니다.

메모리가 문제가되지 않는 경우 목록 및 기타 시퀀스 대신 항상 dict을 사용할 수 있습니다 (임의의 키를 사용하는 유연성을 얻고 사용되는 다른 컨테이너 수를 줄임으로써 코드를 약간 표준화 할 수 있음).)?

+0

순서대로 dict 항목에 액세스하려면'O (n log n)'조작이 필요합니다. –

+0

@PavelAnossov : http://wiki.python.org/moin/TimeComplexity에 따르면,'dict'은 요소 액세스를 위해 O (1)을 상각합니다. "순서대로"가 "목록의 색인 순서대로"를 의미하는 경우, 범위 (ken)에 대해 O (n) :'가됩니다. len (dict_) : yield dict_ [k]'. – max

+0

목록이 주문됩니다. 사전은 그렇지 않습니다. 물론, * collections * 패키지의 * OrderedDict *를 항상 사용할 수도 있습니다. – volcano

답변

5

데이터가 주어진다면 가장 합리적인 데이터 구조를 선호하십시오.

dict 등은 훌륭하지만 예를 들어 순서를 유지하지 않으므로 값을 순서대로 반복하려면 키를 기준으로 정렬해야하므로 복잡성이 생겨 읽기가 어려워집니다. .

일반적으로 list 대신에 dict을 사용하면 응용 프로그램의 속도가 크게 향상 될 것입니다. 즉, 조기 최적화입니다.

코드의 독자와 수정 자, 그리고 저장하려는 데이터에 가장 적합한 것이 무엇보다 중요합니다. 일련의 데이터를 저장하는 곳에서는 list을 사용하십시오. 매핑을 저장하는 곳에서는 dict을 사용합니다.

+0

나는'dict'이 속도를 높이기를 희망하지 않았다. 나는 단지 그것을 줄이지 않기를 바랄 뿐이었고, 앞으로 핵심 유형의 변화에 ​​더 많은 유연성을 제공 할 것입니다. 순서와 관련하여 "유지"를 나열하는 유일한 순서는 색인 순서입니다. 목록을 대체하는 사전 (따라서 키 0, 1, 2, ...)은 자유로운 순서를 제공 할 수 있습니다. 'for k in range (len (dict_))'를 반복하면 yield dict_ [k]'가됩니다. – max

+2

그리고 색인에 의한 반복은 추악하고 비효율적입니다. 나중에 그들을 필요로 막연한 기회와 함께'사전'을 사용할 필요가 없습니다. 'list'를 사용하십시오. 나중에 다른 모음집이 필요할 경우 다른 모음집을 사용하십시오. 의미있는 것을 사용하십시오. –

+1

@max Lattyware에 추가 - 매우 Python 적이 지 않다. – volcano