Python의 데이터 구조 – 전체 가이드

게시 됨: 2021-06-14

목차

데이터 구조란 무엇입니까?

데이터 구조는 효율적인 사용을 위해 데이터를 계산적으로 저장하는 것을 말합니다. 쉽게 수정하고 액세스할 수 있는 방식으로 데이터를 저장합니다. 데이터 값, 이들 간의 관계 및 데이터에 대해 수행할 수 있는 작업을 집합적으로 나타냅니다. 데이터 구조의 중요성은 컴퓨터 프로그램 개발에 적용하는 데 있습니다. 컴퓨터 프로그램은 데이터에 크게 의존하므로 쉽게 액세스할 수 있도록 데이터를 적절하게 배열하는 것이 모든 프로그램이나 소프트웨어에서 가장 중요합니다.

데이터 구조의 네 가지 주요 기능은 다음과 같습니다.

  • 정보를 입력하려면
  • 정보를 처리하려면
  • 정보를 유지하려면
  • 정보를 검색하려면

Python의 데이터 구조 유형

Python은 데이터에 쉽게 액세스하고 저장하기 위해 여러 데이터 구조를 지원합니다. Python 데이터 구조 유형은 기본 및 비기본 데이터 유형으로 분류할 수 있습니다. 전자의 데이터 유형에는 정수, 부동 소수점, 문자열 및 부울이 포함되고 후자는 배열, 목록, 튜플, 사전, 집합 및 파일입니다. 따라서 파이썬의 데이터 구조는 내장 데이터 구조이자 사용자 정의 데이터 구조입니다. 기본 제공 데이터 구조를 기본이 아닌 데이터 구조라고 합니다.

내장 데이터 구조

Python에는 다른 데이터를 저장하기 위한 컨테이너 역할을 하는 여러 데이터 구조가 있습니다. 이러한 파이썬 데이터 구조 는 목록, 사전, 튜플 및 집합입니다.

사용자 정의 데이터 구조

이러한 데이터 구조 는 파이썬 의 내장 데이터 구조와 동일한 기능으로 프로그래밍할 수 있습니다 . 사용자 정의 데이터 구조는 Linked List, Stack, Queue, Tree, Graph 및 Hashmap입니다.

빌드 내 데이터 구조 목록 및 설명

1. 목록

목록에 저장된 데이터는 순차적으로 정렬되며 데이터 유형이 다릅니다. 모든 데이터에 대해 주소가 할당되며 이를 인덱스라고 합니다. 인덱스 값은 0으로 시작하여 마지막 요소까지 계속됩니다. 이것을 양의 지수라고 합니다. 요소가 역으로 액세스되는 경우에도 음수 인덱스가 존재합니다. 이것을 네거티브 인덱싱이라고 합니다.

목록 생성

목록은 대괄호로 생성됩니다. 그런 다음 그에 따라 요소를 추가할 수 있습니다. 대괄호 안에 추가하여 목록을 만들 수 있습니다. 요소가 추가되지 않으면 빈 목록이 생성됩니다. 그렇지 않으면 목록 내의 요소가 생성됩니다.

입력

my_list = [] #빈 목록 생성

인쇄(my_list)

my_list = [1, 2, 3, 'example', 3.132] #데이터로 목록 생성

인쇄(my_list)

산출

[]

[1, 2, 3, '예시', 3.132]

목록에 요소 추가

목록 내에 요소를 추가하는 데 세 가지 기능이 사용됩니다. 이러한 함수는 append(), extend() 및 insert()입니다.

  • 모든 요소는 append() 함수를 사용하여 단일 요소로 추가됩니다.
  • 목록에 요소를 하나씩 추가하기 위해 extend() 함수가 사용됩니다.
  • 인덱스 값으로 요소를 추가하려면 insert() 함수가 사용됩니다.
입력

my_list = [1, 2, 3]

인쇄(my_list)

my_list.append([555, 12]) #단일 요소로 추가

인쇄(my_list)

my_list.extend([234, 'more_example']) # 다른 요소로 추가

인쇄(my_list)

my_list.insert(1, 'insert_example') #요소 추가 i

인쇄(my_list)

산출:

[1, 2, 3]

[1, 2, 3, [555, 12]]

[1, 2, 3, [555, 12], 234, 'more_example']

[1, '예제 삽입', 2, 3, [555, 12], 234, '예제 추가']

목록 내 요소 삭제

파이썬의 내장 키워드 "del"은 목록에서 요소를 삭제하는 데 사용됩니다. 그러나 이 함수는 삭제된 요소를 반환하지 않습니다.

  • 삭제된 요소를 반환하기 위해 pop() 함수가 사용됩니다. 삭제할 요소의 인덱스 값을 사용합니다.
  • remove() 함수는 값으로 요소를 삭제하는 데 사용됩니다.

산출:

[1, 2, 3, '예시', 3.132, 30]

[1, 2, 3, 3.132, 30]

터진 요소: 2 남은 목록: [1, 3, 3.132, 30]

[]

목록의 요소 평가

  • 목록의 요소를 평가하는 것은 간단합니다. 목록을 인쇄하면 요소가 직접 표시됩니다.
  • 인덱스 값을 전달하여 특정 요소를 평가할 수 있습니다.

산출:

1

2

예시

3.132

10

30

[1, 2, 3, '예시', 3.132, 10, 30]

예시

[1, 2]

[30, 10, 3.132, '예시', 3, 2, 1]

위에서 언급한 작업 외에도 목록 작업을 위해 파이썬에서 몇 가지 다른 내장 함수를 사용할 수 있습니다.

  • len(): 함수는 목록의 길이를 반환하는 데 사용됩니다.
  • index(): 이 함수를 사용하면 전달된 값의 인덱스 값을 알 수 있습니다.
  • count() 함수는 전달된 값의 개수를 찾는 데 사용됩니다.
  • sort()는 목록의 값을 정렬하고 목록을 수정합니다.
  • sorted()는 목록의 값을 정렬하고 목록을 반환합니다.

산출

6

2

[1, 2, 3, 10, 10, 30]

[30, 10, 10, 3, 2, 1]

2. 사전

사전은 단일 요소가 아닌 키-값 쌍이 저장되는 데이터 구조 유형입니다. 그것은 전화번호와 함께 개인의 모든 번호가 있는 전화번호부의 예를 들어 설명할 수 있습니다. 여기에서 이름과 전화 번호는 "키"인 상수 값과 해당 키에 대한 값으로 모든 개인의 번호와 이름을 정의합니다. 키를 평가하면 해당 키에 저장된 모든 값에 액세스할 수 있습니다. Python에서 정의된 이 키-값 구조를 사전이라고 합니다.

사전 생성

  • 꽃 괄호 유휴 dict() 함수는 사전을 만드는 데 사용할 수 있습니다.
  • 키-값 쌍은 사전을 생성하는 동안 추가됩니다.

키-값 쌍의 수정

사전의 모든 수정은 키를 통해서만 수행할 수 있습니다. 따라서 키에 먼저 액세스한 다음 수정을 수행해야 합니다.

입력

my_dict = {'First': 'Python', 'Second': 'Java'} print(my_dict) my_dict['Second'] = 'C++' #요소 변경 print(my_dict) my_dict['Third'] = 'Ruby' # 키-값 쌍 추가하기 print(my_dict)

산출:
{'첫 번째': 'Python', '두 번째': '자바'}
{'첫 번째': '파이썬', '두 번째': 'C++'}
{'첫 번째': '파이썬', '두 번째': 'C++', '세 번째': '루비'}


사전 삭제
clear() 함수는 사전 전체를 삭제하는 데 사용됩니다. 사전은 get() 함수를 사용하거나 키 값을 전달하는 키를 통해 평가할 수 있습니다.

입력

dict = {'월': '1월', '계절': '겨울'}

print(dict['첫 번째'])

print(dict.get('초')

산출

1 월

겨울

사전과 관련된 다른 함수는 keys(), values() 및 items()입니다.

3. 튜플

목록과 유사하게 튜플은 데이터 저장소 목록이지만 튜플에 저장된 데이터를 수정할 수 없다는 유일한 차이점이 있습니다. 튜플 내의 데이터가 변경 가능한 경우에만 데이터를 변경할 수 있습니다.

  • tuple() 함수를 통해 튜플을 생성할 수 있습니다.

입력

new_tuple = (10, 20, 30, 40)

인쇄(new_tuple)

산출

(10, 20, 30, 40)

  • 튜플의 요소는 목록의 요소를 평가하는 것과 같은 방식으로 평가할 수 있습니다.

입력

new_tuple2 = (10, 20, 30, '나이')

new_tuple2의 x에 대해:

인쇄(x)

인쇄(new_tuple2)

인쇄(new_tuple2[0])

산출

10

20

30

나이

(10, 20, 30, '나이')

10

  • '+' 연산자는 다른 튜플을 추가하는 데 사용됩니다.

입력

튜플 = (1, 2, 3)

튜플 = 튜플 + (4, 5, 6

인쇄(튜플)

산출

(1, 2, 3, 4, 5, 6)

4. 설정

집합 데이터 구조는 산술 집합과 유사합니다. 기본적으로 고유한 요소의 모음입니다. 데이터가 계속 반복되면 세트는 해당 요소를 한 번만 추가하는 것을 고려합니다.

  • 중괄호 내에서 값을 전달하는 것만으로 집합을 만들 수 있습니다.

입력

세트 = {10, 20, 30, 40, 40, 40}

인쇄(세트)

산출

{10, 20, 30, 40}

  • add() 함수는 집합에 요소를 추가하는 데 사용할 수 있습니다.
  • 두 집합의 데이터를 결합하려면 union() 함수를 사용할 수 있습니다.
  • 두 세트에 모두 존재하는 데이터를 식별하기 위해 Intersection() 함수가 사용됩니다.
  • 차이() 함수는 집합에 고유한 데이터만 출력하고 공통 데이터를 제거합니다.
  • symmetric_difference() 함수는 두 집합에 고유한 데이터를 출력합니다.

사용자 정의 데이터 구조 목록 및 설명

1. 스택

스택은 LIFO(후입선출) 또는 FIFO(선입후출) 구조인 선형 구조입니다. 스택에는 푸시와 팝이라는 두 가지 주요 작업이 있습니다. 푸시는 목록의 맨 위에 요소를 추가하는 것을 의미하고 팝은 스택의 맨 아래에서 요소를 제거하는 것을 의미합니다. 프로세스는 그림 1에 잘 설명되어 있습니다.

스택의 유용성

  • 이전 요소는 역추적을 통해 평가할 수 있습니다.
  • 재귀 요소의 일치.

원천

그림 1: 스택의 그래픽 표현

예시

산출

['첫번째 두번째 세번째']

['첫번째', '두번째', '세번째', '네번째', '다섯번째']

다섯 번째

['첫 번째, 두 번째 세 번째 네 번째']

2. 대기열

스택과 유사하게 큐는 한 쪽 끝에서 요소를 삽입하고 다른 쪽 끝에서 삭제할 수 있는 선형 구조입니다. 두 가지 작업을 enqueue 및 dequeue라고 합니다. 스택처럼 최근에 추가된 요소가 먼저 제거됩니다. 대기열의 그래픽 표현은 그림 2 에 나와 있습니다. 대기열 의 주요 용도 중 하나는 들어오는 즉시 처리하는 것입니다.

원천

그림 2 : 대기열의 그래픽 표현

예시

산출

['첫번째 두번째 세번째']

['첫번째', '두번째', '세번째', '네번째', '다섯번째']

첫 번째

다섯 번째

['두 번째', '세 번째', '네 번째', '다섯 번째']

3. 나무

트리는 에지를 통해 연결된 노드로 구성된 비선형 및 계층적 데이터 구조입니다. 파이썬 트리 데이터 구조 에는 루트 노드, 부모 노드 및 자식 노드가 있습니다. 루트는 데이터 구조의 최상위 요소입니다. 이진 트리는 요소에 자식 노드가 2개 이하인 구조입니다.

나무의 유용성

  • 데이터 요소의 구조적 관계를 표시합니다.
  • 각 노드를 효율적으로 순회
  • 사용자는 데이터를 삽입, 검색, 검색 및 삭제할 수 있습니다.
  • 유연한 데이터 구조

그림 3: 나무의 그래픽 표현

원천

예시:

산출

첫 번째

제삼

4. 그래프

파이썬 의 또 다른 비선형 데이터 구조 는 노드와 간선으로 구성된 그래프입니다. 그래픽으로 링크를 통해 연결된 일부 개체와 함께 개체 집합을 표시합니다. 정점은 상호 연결된 객체이고 링크는 모서리라고 합니다. 그래프의 표현은 python의 사전 데이터 구조를 통해 수행할 수 있습니다. 여기서 키는 꼭짓점을 나타내고 값은 가장자리를 나타냅니다.

그래프에서 수행할 수 있는 기본 작업

  • 그래프 정점과 모서리를 표시합니다.
  • 정점 추가.
  • 모서리 추가.
  • 그래프 생성

그래프의 유용성

  • 그래프의 표현은 이해하기 쉽고 따르기 쉽습니다.
  • 연결된 관계, 즉 Facebook 친구를 나타내는 훌륭한 구조입니다.

그림 4: 그래프의 그래픽 표현

원천

예시

g = 그래프(4)

g.edge(0, 2)

g.edge(1, 3)

g.edge(3, 2)

g.edge(0, 3)

g.__repr__()

산출

꼭짓점 0의 인접 목록

머리 -> 3 -> 2

꼭짓점 1의 인접 목록

머리 -> 3

꼭짓점 2의 인접 목록

머리 -> 3 -> 0

꼭짓점 3의 인접 목록

머리 -> 0 -> 2 -> 1

5. 해시맵

해시맵은 키-값 쌍의 저장에 유용한 인덱싱된 파이썬 데이터 구조 입니다. 해시맵에 저장된 데이터는 해시 함수의 도움을 통해 계산된 키를 통해 검색됩니다. 이러한 유형의 데이터 구조는 학생 데이터, 고객 세부 정보 등을 저장하는 데 유용합니다. Python의 사전은 해시맵의 예입니다.

예시

산출

0 -> 첫 번째

1 -> 초

2 -> 세 번째

0 -> 첫 번째

1 -> 초

2 -> 세 번째

3 -> 네 번째

0 -> 첫 번째

1 -> 초

2 -> 세 번째

유용성

  • 이것은 다른 데이터 구조보다 정보를 검색하는 가장 유연하고 안정적인 방법입니다.

6. 연결 리스트

선형 데이터 구조의 한 유형입니다. 기본적으로 파이썬에서 링크를 통해 결합된 일련의 데이터 요소입니다. 연결 목록의 요소는 포인터를 통해 연결됩니다. 이 데이터 구조의 첫 번째 노드를 헤더라고 하고 마지막 노드를 꼬리라고 합니다. 따라서 연결 리스트는 값을 갖는 노드로 구성되며, 각 노드는 다른 노드에 연결된 포인터로 구성됩니다.

연결 리스트의 유용성

  • 고정된 배열에 비해 연결 목록은 데이터 입력의 동적 형식입니다. 메모리는 노드의 메모리를 할당하면서 저장됩니다. 배열에 있는 동안 크기를 미리 정의해야 하므로 메모리 낭비가 발생합니다.
  • 연결 목록은 메모리의 아무 곳에나 저장할 수 있습니다. 연결 목록 노드를 업데이트하고 다른 위치로 이동할 수 있습니다.

그림 6: 연결 목록의 그래픽 표현

원천

예시

산출:

['첫번째 두번째 세번째']

['첫번째', '두번째', '세번째', '여섯번째', '네번째', '다섯번째']

['첫째', '셋째', '여섯째', '넷째', '다섯째']

결론

파이썬에서 다양한 유형의 데이터 구조 가 탐구되었습니다. 초보자든 전문가든 데이터 구조와 알고리즘은 무시할 수 없습니다. 데이터에 대해 모든 형태의 작업을 수행하는 동안 데이터 구조의 개념이 중요한 역할을 합니다. 데이터 구조는 조직화된 방식으로 정보를 저장하는 데 도움이 되는 반면 알고리즘은 데이터 분석 전반에 걸쳐 안내하는 데 도움이 됩니다. 따라서 파이썬 데이터 구조 와 알고리즘은 모두 컴퓨터 과학자나 사용자가 데이터를 처리하는 데 도움이 됩니다.

데이터 구조에 대해 자세히 알아보려면 작업 전문가를 위해 만들어졌으며 10개 이상의 사례 연구 및 프로젝트, 실용적인 실습 워크샵, 업계 전문가와의 멘토링, 1 - 업계 멘토와 일대일, 400시간 이상의 학습 및 최고의 기업과의 취업 지원.

Python에서 어떤 데이터 구조가 더 빠릅니까?

사전에서 조회는 Python이 해시 테이블을 사용하여 구현하기 때문에 더 빠릅니다. 구분을 설명하기 위해 Big O 개념을 사용하면 사전은 일정한 시간 복잡도 O(1)를 갖는 반면 목록은 선형 시간 복잡도 O(n)을 갖습니다.

Python에서 사전은 수천 개의 항목이 포함된 데이터를 자주 조회하는 가장 빠른 방법입니다. 사전은 Python에 내장된 매핑 유형이기 때문에 고도로 최적화되어 있습니다. 그러나 사전과 목록에는 공통의 시공간 상충 관계가 있습니다. 이는 접근 방식에 필요한 시간을 줄일 수 있지만 더 많은 메모리 공간을 사용해야 함을 나타냅니다.

목록에서 원하는 것을 얻으려면 전체 목록을 살펴봐야 합니다. 반면에 사전은 모든 키를 살펴보지 않고 찾고 있는 값을 반환합니다.

Python 목록과 배열 중 어느 것이 더 빠릅니까?

일반적으로 Python 목록은 매우 유연하며 완전히 이질적인 임의의 데이터를 보유할 수 있을 뿐만 아니라 거의 일정한 시간에 신속하게 추가될 수 있습니다. 목록을 신속하고 고통 없이 축소하고 확장해야 하는 경우 사용할 수 있는 방법입니다. 그러나 부분적으로 목록의 각 항목이 별도의 Python 객체를 생성해야 하기 때문에 배열보다 훨씬 많은 공간을 차지합니다.

반면에 array.array 유형은 본질적으로 C 배열 주위의 얇은 래퍼입니다. 동종 데이터(즉, 동일한 유형의 데이터)만 전달할 수 있으므로 메모리는 sizeof(one object) * length 바이트로 제한됩니다.

NumPy 배열과 목록의 차이점은 무엇입니까?

Numpy는 Python의 과학 컴퓨팅 핵심 패키지입니다. 큰 다차원 배열 개체와 이를 조작하는 유틸리티를 사용합니다. numpy 배열은 음이 아닌 정수의 튜플에 의해 인덱싱된 동일한 유형 값의 그리드입니다.

목록은 Python 핵심 라이브러리에 포함되었습니다. 목록은 Python의 배열과 유사하지만 크기를 조정할 수 있고 다양한 유형의 요소를 포함할 수 있습니다. 여기서 진정한 차이점은 무엇입니까? 성능이 답입니다. Numpy 데이터 구조는 크기, 성능 및 기능면에서 더 효율적입니다.