2009-10-16 7 views
3

저는 파이썬에 관한 튜토리얼을 통해 작업 중이며 특정 상황에서 사용할 데이터 유형/구조를 결정하려고하는 위치에 있습니다.파이썬에서 사용할 데이터 유형을 어떻게 알 수 있습니까?

배열, 목록, 사전 및 튜플의 차이는 분명하지 않습니다.

당신은 어느 쪽이 적절한 지 어떻게 결정합니까 - 현재의 이해로는 저들을 전혀 구별하지 못합니다 - 그들은 똑같은 것처럼 보입니다.

각각의 이점/일반적인 사용 사례는 무엇입니까?

+0

"앞으로 기울고있다"? 대안은 무엇입니까? 어떤 다른 데이터 구조를 고려할 것입니까? 자신이 갖고있는 진정한 질문에 대한 통찰력을 제공해주십시오. 사전을 생각하는 것이 옳지 않은 이유는 무엇입니까? –

+0

주로 중괄호가 있고 좋은 이름을 가졌기 때문에 그것을 골랐기 때문에 주로. 어떤 것을 사용할 지 어떻게 결정합니까? :) –

+1

나는 아직도 질문을받지 않는다. "결정하다"보다 구체적이거나 구체적인 것을 제공 할 수있는 방법이 있습니까? 너 뭐 찾고있어? 디자인 튜토리얼? 알고리즘? 데이터 구조? 자신이 생각하는 선택에 대한 몇 가지 세부 사항으로 질문을 업데이트 할 수 있습니까? 왜 사전에 의심이 가는지 설명해 주시겠습니까? –

답변

3

튜플이 처음입니다. 이들은 수정할 수없는 목록과 같은 것들입니다. 튜플의 내용을 변경할 수 없으므로 튜플을 사전의 키로 사용할 수 있습니다. 그것은 내 생각에 그들에게 가장 유용한 곳입니다. 예를 들어 당신이 item = ["Ford pickup", 1993, 9995] 같은 목록을 가지고 있고 당신은 당신이 같은 시도 할 수있는 가격 작은 메모리 데이터베이스를 만들려면 :

ikey = tuple(item[0], item[1]) 
idata = item[2] 
db[ikey] = idata 

목록을 배열이나 벡터 다른 프로그래밍 언어와 같은 것 같다 Python에서 동일한 유형의 것들에 보통 사용됩니다. 그러나 그들은 같은 목록에 여러 가지 유형의 것을 넣을 수 있다는 점에서보다 융통성이 있습니다. 일반적으로 다른 목록의 단일 목록 요소에 전체 목록을 넣을 수 있기 때문에 가장 융통성있는 데이터 구조이지만 실제 데이터를 처리하려면 충분히 효율적이지 않을 수 있습니다.

a = [1,"fred",7.3] 
b = [] 
b.append(1) 
b[0] = "fred" 
b.append(a) # now the second element of b is the whole list a 

사전은 종종 목록처럼 많이 사용되지만 이제는 수정 불가능한 것을 사전 색인으로 사용할 수 있습니다. 그러나 목록과 달리 사전은 자연 순서가 아니기 때문에 사전에 정렬 할 수 없습니다. 물론 dict이 Ordered Dictionary처럼 동작하도록 정렬 된 목록과 사전을 통합하는 고유 한 클래스를 만들 수 있습니다. Python Cookbook 사이트에 예제가 있습니다.

c = {} 
d = ("ford pickup",1993) 
c[d] = 9995 

배열은 재정 중장비 데이터를하고있는 경우에 대한 비트 수준에 가까워지고있다 그리고 당신은 목록이나 사전의 주름 장식을하지 않습니다. 그들은 과학적 응용의 외부에서 자주 사용되지 않습니다. 필요할 때까지 알리십시오.

목록 및 Dicts는 파이썬 데이터 저장소의 실제 작업자입니다.

+0

개체의 시퀀스 인 목록과 달리 튜플을 수학적 튜플 (쌍, 트리플 등)에 가장 직접적으로 추가한다고 덧붙입니다. 따라서 한 항목 (예 : x 및 y 좌표)을 구성하는 항목의 모음이 있고 개념적으로 개별 항목 인 경우 목록을 표시 할 때 튜플을 사용하십시오. –

0

속도/효율성이 정말로 필요합니까? 다음 순수하고 간단한 dict로 가십시오. 이 같은 요소를 계산하기위한

3

제일 유형은 사용할 데이터 유형을 결정하려면 어떻게 보통 defaultdict

from collections import defaultdict 

s = 'asdhbaklfbdkabhvsdybvailybvdaklybdfklabhdvhba' 
d = defaultdict(int) 

for c in s: 
    d[c] += 1 

print d['a'] # prints 7 
+1

defaultdict가 일반 dict보다 나은 이유는 무엇입니까? –

+1

defaultdict는 dict에없는 키에 대한 기본값을 만듭니다. int의 경우 기본값은 0입니다. 이렇게하면 처음으로 검색하지 않아도되고 항목이 사전에 기록됩니다. –

+0

나는이 질문을 상당히 수정했기 때문에 새로운 독자에게는이 대답이 문맥에 어긋나게 보일 수 있습니다. 그것은 원래 질문을위한 좋은 하나였습니다! –

6

입니까? 간편 :

사용할 수있는 것을보고 원하는 것을 선택하십시오. 그리고 하나가 없다면, 당신은 하나를 만듭니다.

이 경우 dict은 매우 분명한 해결책입니다.

+0

+1. 두 번째 단락은 정확하게 여기에 맞는 답입니다. –

0

개인 : I m ostly 목록 및 사전 사용. 이것은 대부분의 경우를 만족시키는 것으로 보입니다.

간혹 : 튜플을 사용하면 요소를 페어링하거나 일치시킬 수 있습니다. 게다가, 나는 그것을 실제로 사용하지 않는다.

그러나 : 나는 핵심 "효율성"모든 바이트 모든 메모리/나노초이 문제로 드릴 다운 할 필요가 없습니다 높은 수준의 스크립트를 작성합니다. 나는 대부분의 사람들이 이것을 깊이 파고 들어야한다고 생각하지 않는다.

관련 문제