Cấu trúc động trong Python là gì?

Cấu trúc dữ liệu là cấu trúc cơ bản xung quanh đó bạn xây dựng chương trình của mình. Mỗi cấu trúc dữ liệu cung cấp một cách tổ chức dữ liệu cụ thể để có thể truy cập dữ liệu một cách hiệu quả, tùy thuộc vào trường hợp sử dụng của bạn. Python cung cấp một bộ cấu trúc dữ liệu phong phú trong thư viện tiêu chuẩn của nó

Show

Tuy nhiên, quy ước đặt tên của Python không cung cấp mức độ rõ ràng như bạn sẽ tìm thấy trong các ngôn ngữ khác. Trong Java, một danh sách không chỉ là một

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
6—nó có thể là một
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
7 hoặc một
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
8. Không phải như vậy trong Python. Ngay cả những nhà phát triển Python có kinh nghiệm đôi khi cũng thắc mắc liệu loại
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
6 tích hợp được triển khai dưới dạng danh sách được liên kết hay một mảng động

Trong hướng dẫn này, bạn sẽ học

  • Những kiểu dữ liệu trừu tượng phổ biến nào được tích hợp sẵn trong thư viện chuẩn Python
  • Cách các loại dữ liệu trừu tượng phổ biến nhất ánh xạ tới sơ đồ đặt tên của Python
  • Cách đưa các kiểu dữ liệu trừu tượng vào sử dụng thực tế trong các thuật toán khác nhau

Ghi chú. Hướng dẫn này được chuyển thể từ chương “Cấu trúc dữ liệu chung trong Python” trong Thủ thuật Python. Quyển sách. Nếu bạn thích những gì bạn đọc dưới đây, thì hãy nhớ xem phần còn lại của cuốn sách

Tải xuống miễn phí. Nhận một chương mẫu từ Thủ thuật Python. Cuốn sách chỉ cho bạn các phương pháp hay nhất về Python với các ví dụ đơn giản mà bạn có thể áp dụng ngay lập tức để viết mã Pythonic + đẹp hơn

Từ điển, Bản đồ và Bảng băm

Trong Python, từ điển (hay gọi tắt là dicts) là một cấu trúc dữ liệu trung tâm. Dicts lưu trữ một số đối tượng tùy ý, mỗi đối tượng được xác định bằng một khóa từ điển duy nhất

Từ điển cũng thường được gọi là bản đồ, hashmap, bảng tra cứu hoặc mảng kết hợp. Chúng cho phép tra cứu, chèn và xóa hiệu quả bất kỳ đối tượng nào được liên kết với một khóa đã cho

Danh bạ điện thoại tạo ra một đối tượng tương tự trong thế giới thực phù hợp cho các đối tượng từ điển. Chúng cho phép bạn nhanh chóng truy xuất thông tin (số điện thoại) được liên kết với một khóa nhất định (tên của một người). Thay vì phải đọc danh bạ điện thoại từ trước ra sau để tìm số của ai đó, bạn có thể chuyển trực tiếp đến một tên và tra cứu thông tin liên quan

Sự tương tự này bị phá vỡ phần nào khi nói đến cách thông tin được tổ chức để cho phép tra cứu nhanh. Nhưng các đặc điểm hiệu suất cơ bản giữ. Từ điển cho phép bạn nhanh chóng tìm thấy thông tin được liên kết với một khóa nhất định

Từ điển là một trong những cấu trúc dữ liệu quan trọng và được sử dụng thường xuyên nhất trong khoa học máy tính. Vậy Python xử lý từ điển như thế nào?

Loại bỏ các quảng cáo

>>> from types import MappingProxyType >>> writable = {"one": 1, "two": 2} >>> read_only = MappingProxyType(writable) >>> # The proxy is read-only: >>> read_only["one"] 1 >>> read_only["one"] = 23 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'mappingproxy' object does not support item assignment >>> # Updates to the original are reflected in the proxy: >>> writable["one"] = 42 >>> read_only mappingproxy({'one': 42, 'two': 2}) 0. Từ điển Go-To của bạn

Vì từ điển rất quan trọng nên Python có tính năng triển khai từ điển mạnh mẽ được tích hợp trực tiếp vào ngôn ngữ cốt lõi. kiểu dữ liệu

Python cũng cung cấp một số đường cú pháp hữu ích để làm việc với từ điển trong chương trình của bạn. Ví dụ: cú pháp biểu thức từ điển dấu ngoặc nhọn ({ }) và cho phép bạn xác định các đối tượng từ điển mới một cách thuận tiện

>>>

>>> phonebook = {
..     "bob": 7387,
..     "alice": 3719,
..     "jack": 7052,
.. }

>>> squares = {x: x * x for x in range(6)}

>>> phonebook["alice"]
3719

>>> squares
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

Có một số hạn chế về đối tượng nào có thể được sử dụng làm khóa hợp lệ

Từ điển của Python được lập chỉ mục bởi các khóa có thể thuộc bất kỳ loại nào. Đối tượng có thể băm có giá trị băm không bao giờ thay đổi trong suốt thời gian tồn tại của nó (xem

>>> from types import MappingProxyType
>>> writable = {"one": 1, "two": 2}
>>> read_only = MappingProxyType(writable)

>>> # The proxy is read-only:
>>> read_only["one"]
1
>>> read_only["one"] = 23
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'mappingproxy' object does not support item assignment

>>> # Updates to the original are reflected in the proxy:
>>> writable["one"] = 42
>>> read_only
mappingproxy({'one': 42, 'two': 2})
2) và nó có thể được so sánh với các đối tượng khác (xem
>>> from types import MappingProxyType
>>> writable = {"one": 1, "two": 2}
>>> read_only = MappingProxyType(writable)

>>> # The proxy is read-only:
>>> read_only["one"]
1
>>> read_only["one"] = 23
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'mappingproxy' object does not support item assignment

>>> # Updates to the original are reflected in the proxy:
>>> writable["one"] = 42
>>> read_only
mappingproxy({'one': 42, 'two': 2})
3). Các đối tượng có thể băm được so sánh bằng nhau phải có cùng giá trị băm

Các loại bất biến như chuỗi và số có thể băm được và hoạt động tốt như các khóa từ điển. Bạn cũng có thể sử dụng làm khóa từ điển miễn là chúng chỉ chứa các loại có thể băm

Đối với hầu hết các trường hợp sử dụng, việc triển khai từ điển tích hợp sẵn của Python sẽ làm mọi thứ bạn cần. Từ điển được tối ưu hóa cao và làm nền tảng cho nhiều phần của ngôn ngữ. Ví dụ: và các biến trong a đều được lưu trữ nội bộ trong từ điển

Từ điển Python dựa trên triển khai bảng băm đã được kiểm tra kỹ lưỡng và tinh chỉnh, cung cấp các đặc tính hiệu suất mà bạn mong đợi. Độ phức tạp thời gian O(1) đối với các thao tác tra cứu, chèn, cập nhật và xóa trong trường hợp trung bình

Có rất ít lý do để không sử dụng triển khai

>>> from types import MappingProxyType
>>> writable = {"one": 1, "two": 2}
>>> read_only = MappingProxyType(writable)

>>> # The proxy is read-only:
>>> read_only["one"]
1
>>> read_only["one"] = 23
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'mappingproxy' object does not support item assignment

>>> # Updates to the original are reflected in the proxy:
>>> writable["one"] = 42
>>> read_only
mappingproxy({'one': 42, 'two': 2})
0 tiêu chuẩn đi kèm với Python. Tuy nhiên, vẫn tồn tại các triển khai từ điển chuyên biệt của bên thứ ba, chẳng hạn như danh sách bỏ qua hoặc từ điển dựa trên cây B

Bên cạnh các đối tượng

>>> from types import MappingProxyType
>>> writable = {"one": 1, "two": 2}
>>> read_only = MappingProxyType(writable)

>>> # The proxy is read-only:
>>> read_only["one"]
1
>>> read_only["one"] = 23
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'mappingproxy' object does not support item assignment

>>> # Updates to the original are reflected in the proxy:
>>> writable["one"] = 42
>>> read_only
mappingproxy({'one': 42, 'two': 2})
0 đơn giản, thư viện chuẩn của Python cũng bao gồm một số triển khai từ điển chuyên ngành. Các từ điển chuyên ngành này đều dựa trên lớp từ điển tích hợp sẵn (và chia sẻ các đặc điểm hoạt động của nó) nhưng cũng bao gồm một số tính năng tiện lợi bổ sung

Hãy cùng xem qua chúng

>>> from types import MappingProxyType >>> writable = {"one": 1, "two": 2} >>> read_only = MappingProxyType(writable) >>> # The proxy is read-only: >>> read_only["one"] 1 >>> read_only["one"] = 23 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'mappingproxy' object does not support item assignment >>> # Updates to the original are reflected in the proxy: >>> writable["one"] = 42 >>> read_only mappingproxy({'one': 42, 'two': 2}) 7. Ghi nhớ thứ tự chèn phím

Python bao gồm một lớp con

>>> from types import MappingProxyType
>>> writable = {"one": 1, "two": 2}
>>> read_only = MappingProxyType(writable)

>>> # The proxy is read-only:
>>> read_only["one"]
1
>>> read_only["one"] = 23
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'mappingproxy' object does not support item assignment

>>> # Updates to the original are reflected in the proxy:
>>> writable["one"] = 42
>>> read_only
mappingproxy({'one': 42, 'two': 2})
0 chuyên dụng ghi nhớ thứ tự chèn của các khóa được thêm vào nó.
>>> from types import MappingProxyType
>>> writable = {"one": 1, "two": 2}
>>> read_only = MappingProxyType(writable)

>>> # The proxy is read-only:
>>> read_only["one"]
1
>>> read_only["one"] = 23
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'mappingproxy' object does not support item assignment

>>> # Updates to the original are reflected in the proxy:
>>> writable["one"] = 42
>>> read_only
mappingproxy({'one': 42, 'two': 2})
7

Ghi chú.

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
30 không phải là một phần tích hợp sẵn của ngôn ngữ chính và phải được nhập từ mô-đun
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
31 trong thư viện chuẩn

Trong khi các phiên bản ________ 40 tiêu chuẩn duy trì thứ tự chèn của các khóa trong Python 3. 6 trở lên, đây chỉ đơn giản là tác dụng phụ của việc triển khai CPython và không được xác định trong thông số ngôn ngữ cho đến Python 3. 7. Vì vậy, nếu thứ tự khóa là quan trọng để thuật toán của bạn hoạt động, thì tốt nhất bạn nên truyền đạt điều này một cách rõ ràng bằng cách sử dụng rõ ràng lớp

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
30

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
7

Cho đến Python 3. 8, bạn không thể lặp lại các mục từ điển theo thứ tự ngược lại bằng cách sử dụng

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
34. Chỉ có phiên bản
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
30 cung cấp chức năng đó. Ngay cả trong Python 3. 8,
>>> from types import MappingProxyType
>>> writable = {"one": 1, "two": 2}
>>> read_only = MappingProxyType(writable)

>>> # The proxy is read-only:
>>> read_only["one"]
1
>>> read_only["one"] = 23
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'mappingproxy' object does not support item assignment

>>> # Updates to the original are reflected in the proxy:
>>> writable["one"] = 42
>>> read_only
mappingproxy({'one': 42, 'two': 2})
0 và
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
30 đối tượng không hoàn toàn giống nhau. Phiên bản
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
30 có phương thức
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
39 không khả dụng trên phiên bản
>>> from types import MappingProxyType
>>> writable = {"one": 1, "two": 2}
>>> read_only = MappingProxyType(writable)

>>> # The proxy is read-only:
>>> read_only["one"]
1
>>> read_only["one"] = 23
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'mappingproxy' object does not support item assignment

>>> # Updates to the original are reflected in the proxy:
>>> writable["one"] = 42
>>> read_only
mappingproxy({'one': 42, 'two': 2})
0 đơn giản, cũng như có thể tùy chỉnh nhiều hơn so với phiên bản
>>> from types import MappingProxyType
>>> writable = {"one": 1, "two": 2}
>>> read_only = MappingProxyType(writable)

>>> # The proxy is read-only:
>>> read_only["one"]
1
>>> read_only["one"] = 23
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'mappingproxy' object does not support item assignment

>>> # Updates to the original are reflected in the proxy:
>>> writable["one"] = 42
>>> read_only
mappingproxy({'one': 42, 'two': 2})
0 đơn giản

>>> from collections import ChainMap >>> dict1 = {"one": 1, "two": 2} >>> dict2 = {"three": 3, "four": 4} >>> chain = ChainMap(dict1, dict2) >>> chain ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4}) >>> # ChainMap searches each collection in the chain >>> # from left to right until it finds the key (or fails): >>> chain["three"] 3 >>> chain["one"] 1 >>> chain["missing"] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'missing' 63. Trả lại giá trị mặc định cho các phím bị thiếu

Lớp này là một lớp con từ điển khác chấp nhận một hàm có thể gọi được trong hàm tạo của nó có giá trị trả về sẽ được sử dụng nếu không tìm thấy khóa được yêu cầu

Điều này có thể giúp bạn tiết kiệm một số thao tác gõ và làm cho ý định của bạn rõ ràng hơn so với việc sử dụng

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
65 hoặc bắt ngoại lệ
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
66 trong các từ điển thông thường

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
9

Loại bỏ các quảng cáo

>>> from collections import ChainMap >>> dict1 = {"one": 1, "two": 2} >>> dict2 = {"three": 3, "four": 4} >>> chain = ChainMap(dict1, dict2) >>> chain ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4}) >>> # ChainMap searches each collection in the chain >>> # from left to right until it finds the key (or fails): >>> chain["three"] 3 >>> chain["one"] 1 >>> chain["missing"] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'missing' 67. Tìm kiếm nhiều từ điển dưới dạng ánh xạ đơn

Cấu trúc dữ liệu nhóm nhiều từ điển thành một ánh xạ duy nhất. Tra cứu tìm kiếm từng ánh xạ cơ bản cho đến khi tìm thấy khóa. Chèn, cập nhật và xóa chỉ ảnh hưởng đến ánh xạ đầu tiên được thêm vào chuỗi

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'

>>> from collections import ChainMap >>> dict1 = {"one": 1, "two": 2} >>> dict2 = {"three": 3, "four": 4} >>> chain = ChainMap(dict1, dict2) >>> chain ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4}) >>> # ChainMap searches each collection in the chain >>> # from left to right until it finds the key (or fails): >>> chain["three"] 3 >>> chain["one"] 1 >>> chain["missing"] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'missing' 69. Trình bao bọc để tạo từ điển chỉ đọc

là trình bao bọc xung quanh từ điển tiêu chuẩn cung cấp chế độ xem chỉ đọc đối với dữ liệu của từ điển được bao bọc. Lớp này đã được thêm vào Python 3. 3 và có thể được sử dụng để tạo các phiên bản proxy bất biến của từ điển

Ví dụ:

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
30 có thể hữu ích nếu bạn muốn trả về một từ điển mang trạng thái bên trong từ một lớp hoặc mô-đun trong khi không khuyến khích quyền ghi vào đối tượng này. Sử dụng
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
30 cho phép bạn áp dụng các hạn chế này mà không cần phải tạo một bản sao đầy đủ của từ điển

>>>

>>> from types import MappingProxyType
>>> writable = {"one": 1, "two": 2}
>>> read_only = MappingProxyType(writable)

>>> # The proxy is read-only:
>>> read_only["one"]
1
>>> read_only["one"] = 23
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'mappingproxy' object does not support item assignment

>>> # Updates to the original are reflected in the proxy:
>>> writable["one"] = 42
>>> read_only
mappingproxy({'one': 42, 'two': 2})

Từ điển trong Python. Tóm lược

Tất cả các triển khai từ điển Python được liệt kê trong hướng dẫn này là các triển khai hợp lệ được tích hợp trong thư viện chuẩn Python

Nếu bạn đang tìm kiếm một đề xuất chung về loại ánh xạ nào sẽ được sử dụng trong các chương trình của mình, thì tôi sẽ chỉ cho bạn loại dữ liệu

>>> from types import MappingProxyType
>>> writable = {"one": 1, "two": 2}
>>> read_only = MappingProxyType(writable)

>>> # The proxy is read-only:
>>> read_only["one"]
1
>>> read_only["one"] = 23
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'mappingproxy' object does not support item assignment

>>> # Updates to the original are reflected in the proxy:
>>> writable["one"] = 42
>>> read_only
mappingproxy({'one': 42, 'two': 2})
0 được tích hợp sẵn. Đó là một triển khai bảng băm linh hoạt và được tối ưu hóa được tích hợp trực tiếp vào ngôn ngữ cốt lõi

Tôi khuyên bạn chỉ nên sử dụng một trong các loại dữ liệu khác được liệt kê ở đây nếu bạn có các yêu cầu đặc biệt vượt ra ngoài những gì được cung cấp bởi

>>> from types import MappingProxyType
>>> writable = {"one": 1, "two": 2}
>>> read_only = MappingProxyType(writable)

>>> # The proxy is read-only:
>>> read_only["one"]
1
>>> read_only["one"] = 23
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'mappingproxy' object does not support item assignment

>>> # Updates to the original are reflected in the proxy:
>>> writable["one"] = 42
>>> read_only
mappingproxy({'one': 42, 'two': 2})
0

Tất cả các triển khai đều là các tùy chọn hợp lệ, nhưng mã của bạn sẽ rõ ràng hơn và dễ bảo trì hơn nếu nó luôn dựa vào các từ điển Python tiêu chuẩn

Cấu trúc dữ liệu mảng

Mảng là một cấu trúc dữ liệu cơ bản có sẵn trong hầu hết các ngôn ngữ lập trình và nó có nhiều cách sử dụng trên các thuật toán khác nhau

Trong phần này, bạn sẽ xem xét các triển khai mảng trong Python chỉ sử dụng các tính năng hoặc chức năng ngôn ngữ cốt lõi có trong thư viện chuẩn của Python. Bạn sẽ thấy điểm mạnh và điểm yếu của từng phương pháp để bạn có thể quyết định cách triển khai nào phù hợp với trường hợp sử dụng của mình

Nhưng trước khi bắt đầu, trước tiên chúng ta hãy đề cập đến một số điều cơ bản. Mảng hoạt động như thế nào và chúng được sử dụng để làm gì?

Cấu trúc động trong Python là gì?

Vì mảng lưu trữ thông tin trong các khối bộ nhớ liền kề, nên chúng được coi là cấu trúc dữ liệu liền kề (ví dụ: trái ngược với cấu trúc dữ liệu được liên kết như danh sách được liên kết)

Một sự tương tự trong thế giới thực cho cấu trúc dữ liệu mảng là một bãi đậu xe. Bạn có thể xem toàn bộ bãi đậu xe và coi nó như một đối tượng duy nhất, nhưng bên trong bãi đậu xe có các điểm đỗ xe được lập chỉ mục bằng một số duy nhất. Điểm đỗ xe là nơi chứa phương tiện—mỗi điểm đỗ xe có thể trống hoặc có ô tô, xe máy hoặc một số phương tiện khác đỗ trên đó

Nhưng không phải tất cả các bãi đậu xe đều giống nhau. Một số bãi đậu xe có thể chỉ được giới hạn cho một loại phương tiện. Ví dụ: một bãi đậu xe máy sẽ không cho phép đậu xe đạp trên đó. Bãi đỗ xe bị hạn chế tương ứng với cấu trúc dữ liệu mảng đã nhập chỉ cho phép các phần tử có cùng kiểu dữ liệu được lưu trữ trong đó

Về mặt hiệu suất, rất nhanh để tra cứu một phần tử có trong một mảng với chỉ mục của phần tử đó. Việc triển khai mảng phù hợp đảm bảo thời gian truy cập O(1) không đổi cho trường hợp này

Python bao gồm một số cấu trúc dữ liệu dạng mảng trong thư viện chuẩn của nó, mỗi cấu trúc có các đặc điểm hơi khác nhau. Hãy cùng xem

Loại bỏ các quảng cáo

>>> from collections import ChainMap >>> dict1 = {"one": 1, "two": 2} >>> dict2 = {"three": 3, "four": 4} >>> chain = ChainMap(dict1, dict2) >>> chain ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4}) >>> # ChainMap searches each collection in the chain >>> # from left to right until it finds the key (or fails): >>> chain["three"] 3 >>> chain["one"] 1 >>> chain["missing"] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'missing' 6. Mảng động có thể thay đổi

là một phần của ngôn ngữ Python cốt lõi. Bất chấp tên của chúng, các danh sách của Python được triển khai dưới dạng các mảng động đằng sau hậu trường

Điều này có nghĩa là danh sách cho phép thêm hoặc xóa các phần tử và danh sách sẽ tự động điều chỉnh kho lưu trữ sao lưu chứa các phần tử này bằng cách cấp phát hoặc giải phóng bộ nhớ

Danh sách Python có thể chứa các phần tử tùy ý—mọi thứ đều là một đối tượng trong Python, kể cả các hàm. Do đó, bạn có thể kết hợp và kết hợp các loại dữ liệu khác nhau và lưu trữ tất cả chúng trong một danh sách duy nhất

Đây có thể là một tính năng mạnh mẽ, nhưng nhược điểm là việc hỗ trợ nhiều loại dữ liệu cùng lúc có nghĩa là dữ liệu thường ít được đóng gói chặt chẽ hơn. Kết quả là, toàn bộ cấu trúc chiếm nhiều không gian hơn

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
3

>>> from types import MappingProxyType >>> writable = {"one": 1, "two": 2} >>> read_only = MappingProxyType(writable) >>> # The proxy is read-only: >>> read_only["one"] 1 >>> read_only["one"] = 23 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'mappingproxy' object does not support item assignment >>> # Updates to the original are reflected in the proxy: >>> writable["one"] = 42 >>> read_only mappingproxy({'one': 42, 'two': 2}) 4. Container bất biến

Giống như danh sách, là một phần của ngôn ngữ cốt lõi Python. Tuy nhiên, không giống như danh sách, các đối tượng

>>> from types import MappingProxyType
>>> writable = {"one": 1, "two": 2}
>>> read_only = MappingProxyType(writable)

>>> # The proxy is read-only:
>>> read_only["one"]
1
>>> read_only["one"] = 23
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'mappingproxy' object does not support item assignment

>>> # Updates to the original are reflected in the proxy:
>>> writable["one"] = 42
>>> read_only
mappingproxy({'one': 42, 'two': 2})
4 của Python là bất biến. Điều này có nghĩa là không thể thêm hoặc xóa các phần tử một cách linh hoạt—tất cả các phần tử trong một bộ phải được xác định tại thời điểm tạo

Bộ dữ liệu là một cấu trúc dữ liệu khác có thể chứa các phần tử của các kiểu dữ liệu tùy ý. Tính linh hoạt này rất mạnh mẽ, nhưng một lần nữa, điều đó cũng có nghĩa là dữ liệu được đóng gói ít chặt chẽ hơn so với trong một mảng đã nhập

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
6

>>> from collections import ChainMap >>> dict1 = {"one": 1, "two": 2} >>> dict2 = {"three": 3, "four": 4} >>> chain = ChainMap(dict1, dict2) >>> chain ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4}) >>> # ChainMap searches each collection in the chain >>> # from left to right until it finds the key (or fails): >>> chain["three"] 3 >>> chain["one"] 1 >>> chain["missing"] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'missing' 38. Mảng gõ cơ bản

Mô-đun

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
39 của Python cung cấp khả năng lưu trữ tiết kiệm không gian cho các kiểu dữ liệu kiểu C cơ bản như byte, số nguyên 32 bit, số dấu phẩy động, v.v.

Mảng được tạo bằng lớp

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
38 có thể thay đổi và hoạt động tương tự như danh sách ngoại trừ một điểm khác biệt quan trọng. chúng là các mảng được nhập vào một kiểu dữ liệu duy nhất

Do ràng buộc này, các đối tượng

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
38 có nhiều phần tử sẽ tiết kiệm không gian hơn so với danh sách và bộ dữ liệu. Các phần tử được lưu trữ trong chúng được đóng gói chặt chẽ và điều này có thể hữu ích nếu bạn cần lưu trữ nhiều phần tử cùng loại

Ngoài ra, mảng hỗ trợ nhiều phương thức giống như danh sách thông thường và bạn có thể sử dụng chúng như một phương thức thay thế thả xuống mà không yêu cầu các thay đổi khác đối với mã ứng dụng của mình

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
3

>>> from types import MappingProxyType >>> writable = {"one": 1, "two": 2} >>> read_only = MappingProxyType(writable) >>> # The proxy is read-only: >>> read_only["one"] 1 >>> read_only["one"] = 23 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'mappingproxy' object does not support item assignment >>> # Updates to the original are reflected in the proxy: >>> writable["one"] = 42 >>> read_only mappingproxy({'one': 42, 'two': 2}) 82. Mảng ký tự Unicode bất biến

Trăn 3. x sử dụng các đối tượng để lưu trữ dữ liệu văn bản dưới dạng các chuỗi ký tự Unicode bất biến. Nói một cách thực tế, điều đó có nghĩa là một

>>> from types import MappingProxyType
>>> writable = {"one": 1, "two": 2}
>>> read_only = MappingProxyType(writable)

>>> # The proxy is read-only:
>>> read_only["one"]
1
>>> read_only["one"] = 23
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'mappingproxy' object does not support item assignment

>>> # Updates to the original are reflected in the proxy:
>>> writable["one"] = 42
>>> read_only
mappingproxy({'one': 42, 'two': 2})
82 là một mảng ký tự bất biến. Thật kỳ lạ, nó cũng là một cấu trúc dữ liệu đệ quy—mỗi ký tự trong một chuỗi tự nó là một đối tượng
>>> from types import MappingProxyType
>>> writable = {"one": 1, "two": 2}
>>> read_only = MappingProxyType(writable)

>>> # The proxy is read-only:
>>> read_only["one"]
1
>>> read_only["one"] = 23
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'mappingproxy' object does not support item assignment

>>> # Updates to the original are reflected in the proxy:
>>> writable["one"] = 42
>>> read_only
mappingproxy({'one': 42, 'two': 2})
82 có độ dài 1

Các đối tượng chuỗi tiết kiệm không gian hiệu quả vì chúng được đóng gói chặt chẽ và chúng chuyên về một kiểu dữ liệu duy nhất. Nếu bạn đang lưu trữ văn bản Unicode, thì bạn nên sử dụng một chuỗi

Vì các chuỗi là bất biến trong Python, nên việc sửa đổi một chuỗi yêu cầu tạo một bản sao đã sửa đổi. Tương đương gần nhất với chuỗi có thể thay đổi là lưu trữ các ký tự riêng lẻ trong danh sách

>>>

>>> from types import MappingProxyType
>>> writable = {"one": 1, "two": 2}
>>> read_only = MappingProxyType(writable)

>>> # The proxy is read-only:
>>> read_only["one"]
1
>>> read_only["one"] = 23
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'mappingproxy' object does not support item assignment

>>> # Updates to the original are reflected in the proxy:
>>> writable["one"] = 42
>>> read_only
mappingproxy({'one': 42, 'two': 2})
8

Loại bỏ các quảng cáo

>>> from types import MappingProxyType >>> writable = {"one": 1, "two": 2} >>> read_only = MappingProxyType(writable) >>> # The proxy is read-only: >>> read_only["one"] 1 >>> read_only["one"] = 23 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'mappingproxy' object does not support item assignment >>> # Updates to the original are reflected in the proxy: >>> writable["one"] = 42 >>> read_only mappingproxy({'one': 42, 'two': 2}) 86. Mảng bất biến của byte đơn

các đối tượng là các chuỗi bất biến của các byte đơn hoặc số nguyên trong phạm vi 0 ≤ x ≤ 255. Về mặt khái niệm, _____ 486 đối tượng tương tự như đối tượng ________ 482 và bạn cũng có thể coi chúng là mảng byte bất biến

Giống như chuỗi,

>>> from types import MappingProxyType
>>> writable = {"one": 1, "two": 2}
>>> read_only = MappingProxyType(writable)

>>> # The proxy is read-only:
>>> read_only["one"]
1
>>> read_only["one"] = 23
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'mappingproxy' object does not support item assignment

>>> # Updates to the original are reflected in the proxy:
>>> writable["one"] = 42
>>> read_only
mappingproxy({'one': 42, 'two': 2})
86 có cú pháp theo nghĩa đen riêng để tạo đối tượng và tiết kiệm không gian. Các đối tượng
>>> from types import MappingProxyType
>>> writable = {"one": 1, "two": 2}
>>> read_only = MappingProxyType(writable)

>>> # The proxy is read-only:
>>> read_only["one"]
1
>>> read_only["one"] = 23
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'mappingproxy' object does not support item assignment

>>> # Updates to the original are reflected in the proxy:
>>> writable["one"] = 42
>>> read_only
mappingproxy({'one': 42, 'two': 2})
86 là bất biến, nhưng không giống như các chuỗi, có một kiểu dữ liệu mảng byte có thể thay đổi chuyên dụng được gọi là
>>> phonebook = {
..     "bob": 7387,
..     "alice": 3719,
..     "jack": 7052,
.. }

>>> squares = {x: x * x for x in range(6)}

>>> phonebook["alice"]
3719

>>> squares
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
72 mà chúng có thể được giải nén thành

>>>

>>> phonebook = {
..     "bob": 7387,
..     "alice": 3719,
..     "jack": 7052,
.. }

>>> squares = {x: x * x for x in range(6)}

>>> phonebook["alice"]
3719

>>> squares
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
7

>>> phonebook = { .. "bob": 7387, .. "alice": 3719, .. "jack": 7052, .. } >>> squares = {x: x * x for x in range(6)} >>> phonebook["alice"] 3719 >>> squares {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25} 72. Mảng có thể thay đổi của byte đơn

Loại là một chuỗi các số nguyên có thể thay đổi trong phạm vi 0 ≤ x ≤ 255. Đối tượng

>>> phonebook = {
..     "bob": 7387,
..     "alice": 3719,
..     "jack": 7052,
.. }

>>> squares = {x: x * x for x in range(6)}

>>> phonebook["alice"]
3719

>>> squares
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
72 có liên quan chặt chẽ với đối tượng
>>> from types import MappingProxyType
>>> writable = {"one": 1, "two": 2}
>>> read_only = MappingProxyType(writable)

>>> # The proxy is read-only:
>>> read_only["one"]
1
>>> read_only["one"] = 23
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'mappingproxy' object does not support item assignment

>>> # Updates to the original are reflected in the proxy:
>>> writable["one"] = 42
>>> read_only
mappingproxy({'one': 42, 'two': 2})
86, với sự khác biệt chính là một
>>> phonebook = {
..     "bob": 7387,
..     "alice": 3719,
..     "jack": 7052,
.. }

>>> squares = {x: x * x for x in range(6)}

>>> phonebook["alice"]
3719

>>> squares
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
72 có thể được sửa đổi tự do—bạn có thể ghi đè lên các phần tử, loại bỏ các phần tử hiện có hoặc thêm phần tử mới. Đối tượng
>>> phonebook = {
..     "bob": 7387,
..     "alice": 3719,
..     "jack": 7052,
.. }

>>> squares = {x: x * x for x in range(6)}

>>> phonebook["alice"]
3719

>>> squares
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
72 sẽ phát triển và thu nhỏ tương ứng

Một

>>> phonebook = {
..     "bob": 7387,
..     "alice": 3719,
..     "jack": 7052,
.. }

>>> squares = {x: x * x for x in range(6)}

>>> phonebook["alice"]
3719

>>> squares
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
72 có thể được chuyển đổi trở lại thành các đối tượng
>>> from types import MappingProxyType
>>> writable = {"one": 1, "two": 2}
>>> read_only = MappingProxyType(writable)

>>> # The proxy is read-only:
>>> read_only["one"]
1
>>> read_only["one"] = 23
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'mappingproxy' object does not support item assignment

>>> # Updates to the original are reflected in the proxy:
>>> writable["one"] = 42
>>> read_only
mappingproxy({'one': 42, 'two': 2})
86 bất biến, nhưng điều này liên quan đến việc sao chép toàn bộ dữ liệu được lưu trữ—một thao tác chậm mất thời gian O(n)

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
70

Mảng trong Python. Tóm lược

Có một số cấu trúc dữ liệu tích hợp sẵn mà bạn có thể chọn khi triển khai mảng trong Python. Trong phần này, bạn đã tập trung vào các tính năng cốt lõi của ngôn ngữ và cấu trúc dữ liệu có trong thư viện chuẩn

Nếu bạn sẵn sàng vượt ra ngoài thư viện tiêu chuẩn của Python, thì các gói của bên thứ ba như NumPy và pandas sẽ cung cấp nhiều cách triển khai mảng nhanh cho khoa học dữ liệu và điện toán khoa học

Nếu bạn muốn giới hạn bản thân trong các cấu trúc dữ liệu mảng có trong Python, thì đây là một số hướng dẫn

  • Nếu bạn cần lưu trữ các đối tượng tùy ý, có khả năng chứa các loại dữ liệu hỗn hợp, thì hãy sử dụng

    >>> from collections import ChainMap
    >>> dict1 = {"one": 1, "two": 2}
    >>> dict2 = {"three": 3, "four": 4}
    >>> chain = ChainMap(dict1, dict2)
    
    >>> chain
    ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})
    
    >>> # ChainMap searches each collection in the chain
    >>> # from left to right until it finds the key (or fails):
    >>> chain["three"]
    3
    >>> chain["one"]
    1
    >>> chain["missing"]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'missing'
    
    6 hoặc
    >>> from types import MappingProxyType
    >>> writable = {"one": 1, "two": 2}
    >>> read_only = MappingProxyType(writable)
    
    >>> # The proxy is read-only:
    >>> read_only["one"]
    1
    >>> read_only["one"] = 23
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'mappingproxy' object does not support item assignment
    
    >>> # Updates to the original are reflected in the proxy:
    >>> writable["one"] = 42
    >>> read_only
    mappingproxy({'one': 42, 'two': 2})
    
    4, tùy thuộc vào việc bạn có muốn cấu trúc dữ liệu bất biến hay không

  • Nếu bạn có dữ liệu số (số nguyên hoặc dấu phẩy động) và đóng gói chặt chẽ và hiệu suất là quan trọng, thì hãy dùng thử

    >>> from collections import ChainMap
    >>> dict1 = {"one": 1, "two": 2}
    >>> dict2 = {"three": 3, "four": 4}
    >>> chain = ChainMap(dict1, dict2)
    
    >>> chain
    ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})
    
    >>> # ChainMap searches each collection in the chain
    >>> # from left to right until it finds the key (or fails):
    >>> chain["three"]
    3
    >>> chain["one"]
    1
    >>> chain["missing"]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'missing'
    
    38

  • Nếu bạn có dữ liệu văn bản được biểu thị dưới dạng ký tự Unicode, thì hãy sử dụng

    >>> from types import MappingProxyType
    >>> writable = {"one": 1, "two": 2}
    >>> read_only = MappingProxyType(writable)
    
    >>> # The proxy is read-only:
    >>> read_only["one"]
    1
    >>> read_only["one"] = 23
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'mappingproxy' object does not support item assignment
    
    >>> # Updates to the original are reflected in the proxy:
    >>> writable["one"] = 42
    >>> read_only
    mappingproxy({'one': 42, 'two': 2})
    
    82 tích hợp sẵn của Python. Nếu bạn cần cấu trúc dữ liệu dạng chuỗi có thể thay đổi, thì hãy sử dụng
    >>> from collections import ChainMap
    >>> dict1 = {"one": 1, "two": 2}
    >>> dict2 = {"three": 3, "four": 4}
    >>> chain = ChainMap(dict1, dict2)
    
    >>> chain
    ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})
    
    >>> # ChainMap searches each collection in the chain
    >>> # from left to right until it finds the key (or fails):
    >>> chain["three"]
    3
    >>> chain["one"]
    1
    >>> chain["missing"]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'missing'
    
    6 ký tự

  • Nếu bạn muốn lưu trữ một khối byte liền kề, thì hãy sử dụng loại

    >>> from types import MappingProxyType
    >>> writable = {"one": 1, "two": 2}
    >>> read_only = MappingProxyType(writable)
    
    >>> # The proxy is read-only:
    >>> read_only["one"]
    1
    >>> read_only["one"] = 23
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'mappingproxy' object does not support item assignment
    
    >>> # Updates to the original are reflected in the proxy:
    >>> writable["one"] = 42
    >>> read_only
    mappingproxy({'one': 42, 'two': 2})
    
    86 bất biến hoặc
    >>> phonebook = {
    ..     "bob": 7387,
    ..     "alice": 3719,
    ..     "jack": 7052,
    .. }
    
    >>> squares = {x: x * x for x in range(6)}
    
    >>> phonebook["alice"]
    3719
    
    >>> squares
    {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
    
    72 nếu bạn cần cấu trúc dữ liệu có thể thay đổi

Trong hầu hết các trường hợp, tôi muốn bắt đầu với một

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
6 đơn giản. Sau này tôi sẽ chỉ chuyên sâu nếu hiệu suất hoặc dung lượng lưu trữ trở thành vấn đề. Hầu hết thời gian, việc sử dụng cấu trúc dữ liệu mảng có mục đích chung như
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
6 mang lại cho bạn tốc độ phát triển nhanh nhất và sự tiện lợi nhất khi lập trình

Tôi nhận thấy rằng điều này ngay từ đầu thường quan trọng hơn nhiều so với việc cố gắng vắt kiệt từng giọt hiệu suất cuối cùng ngay từ đầu

Bản ghi, cấu trúc và đối tượng truyền dữ liệu

So với mảng, cấu trúc dữ liệu bản ghi cung cấp một số trường cố định. Mỗi trường có thể có tên và cũng có thể có kiểu khác

Trong phần này, bạn sẽ thấy cách triển khai các bản ghi, cấu trúc và các đối tượng dữ liệu cũ thuần túy trong Python chỉ sử dụng các loại và lớp dữ liệu tích hợp sẵn từ thư viện chuẩn

Ghi chú. Tôi đang sử dụng định nghĩa của một bản ghi một cách lỏng lẻo ở đây. Ví dụ: tôi cũng sẽ thảo luận về các loại như

>>> from types import MappingProxyType
>>> writable = {"one": 1, "two": 2}
>>> read_only = MappingProxyType(writable)

>>> # The proxy is read-only:
>>> read_only["one"]
1
>>> read_only["one"] = 23
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'mappingproxy' object does not support item assignment

>>> # Updates to the original are reflected in the proxy:
>>> writable["one"] = 42
>>> read_only
mappingproxy({'one': 42, 'two': 2})
4 tích hợp sẵn của Python có thể hoặc không được coi là bản ghi theo nghĩa chặt chẽ vì chúng không cung cấp các trường được đặt tên

Python cung cấp một số loại dữ liệu mà bạn có thể sử dụng để triển khai các bản ghi, cấu trúc và đối tượng truyền dữ liệu. Trong phần này, bạn sẽ xem nhanh từng triển khai và các đặc điểm riêng của nó. Cuối cùng, bạn sẽ tìm thấy một bản tóm tắt và hướng dẫn ra quyết định sẽ giúp bạn đưa ra lựa chọn của riêng mình

Ghi chú. Hướng dẫn này được chuyển thể từ chương “Cấu trúc dữ liệu chung trong Python” trong Thủ thuật Python. Quyển sách. Nếu bạn thích những gì bạn đang đọc, thì hãy nhớ xem phần còn lại của cuốn sách

Được rồi, chúng ta hãy bắt đầu

Loại bỏ các quảng cáo

>>> from types import MappingProxyType >>> writable = {"one": 1, "two": 2} >>> read_only = MappingProxyType(writable) >>> # The proxy is read-only: >>> read_only["one"] 1 >>> read_only["one"] = 23 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'mappingproxy' object does not support item assignment >>> # Updates to the original are reflected in the proxy: >>> writable["one"] = 42 >>> read_only mappingproxy({'one': 42, 'two': 2}) 0. Đối tượng dữ liệu đơn giản

Như đã đề cập, từ điển Python lưu trữ một số đối tượng tùy ý, mỗi đối tượng được xác định bằng một khóa duy nhất. Từ điển cũng thường được gọi là bản đồ hoặc mảng kết hợp và cho phép tra cứu, chèn và xóa hiệu quả bất kỳ đối tượng nào được liên kết với một khóa đã cho

Có thể sử dụng từ điển làm kiểu dữ liệu bản ghi hoặc đối tượng dữ liệu trong Python. Từ điển rất dễ tạo bằng Python vì chúng có đường cú pháp riêng được tích hợp vào ngôn ngữ dưới dạng chữ từ điển. Cú pháp từ điển ngắn gọn và khá thuận tiện để gõ

Các đối tượng dữ liệu được tạo bằng từ điển có thể thay đổi được và có rất ít sự bảo vệ đối với tên trường sai chính tả vì các trường có thể được thêm và xóa tự do bất kỳ lúc nào. Cả hai thuộc tính này đều có thể gây ra các lỗi đáng ngạc nhiên và luôn có sự đánh đổi giữa sự thuận tiện và khả năng phục hồi lỗi

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
71

>>> from types import MappingProxyType >>> writable = {"one": 1, "two": 2} >>> read_only = MappingProxyType(writable) >>> # The proxy is read-only: >>> read_only["one"] 1 >>> read_only["one"] = 23 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'mappingproxy' object does not support item assignment >>> # Updates to the original are reflected in the proxy: >>> writable["one"] = 42 >>> read_only mappingproxy({'one': 42, 'two': 2}) 4. Nhóm đối tượng bất biến

Bộ dữ liệu Python là một cấu trúc dữ liệu đơn giản để nhóm các đối tượng tùy ý. Các bộ dữ liệu là bất biến—chúng không thể được sửa đổi sau khi chúng được tạo

Về mặt hiệu suất, các bộ dữ liệu chiếm hơn , và chúng cũng nhanh hơn để xây dựng

Như bạn có thể thấy trong phần phân tách mã byte bên dưới, việc xây dựng hằng số bộ cần một mã lệnh

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
713 duy nhất, trong khi việc xây dựng một đối tượng danh sách có cùng nội dung yêu cầu thêm một số thao tác

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
72

Tuy nhiên, bạn không nên quá chú trọng vào những điểm khác biệt này. Trong thực tế, sự khác biệt về hiệu suất thường sẽ không đáng kể và việc cố gắng loại bỏ hiệu suất bổ sung ra khỏi chương trình bằng cách chuyển từ danh sách sang bộ dữ liệu có thể sẽ là cách tiếp cận sai lầm.

Một nhược điểm tiềm năng của các bộ dữ liệu đơn giản là dữ liệu bạn lưu trữ trong chúng chỉ có thể được lấy ra bằng cách truy cập nó thông qua các chỉ mục số nguyên. Bạn không thể đặt tên cho các thuộc tính riêng lẻ được lưu trữ trong một bộ. Điều này có thể ảnh hưởng đến khả năng đọc mã

Ngoài ra, một tuple luôn là một cấu trúc đặc biệt. rất khó để đảm bảo rằng hai bộ dữ liệu có cùng số lượng trường và cùng thuộc tính được lưu trữ trong chúng

Điều này giúp dễ dàng đưa ra các lỗi sơ ý, chẳng hạn như trộn lẫn thứ tự trường. Do đó, tôi khuyên bạn nên giữ số lượng trường được lưu trữ trong một bộ dữ liệu càng thấp càng tốt

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
73

Viết một lớp tùy chỉnh. Làm việc nhiều hơn, kiểm soát nhiều hơn

Các lớp cho phép bạn xác định các bản thiết kế có thể tái sử dụng cho các đối tượng dữ liệu để đảm bảo mỗi đối tượng cung cấp cùng một tập hợp các trường

Sử dụng các lớp Python thông thường làm kiểu dữ liệu bản ghi là khả thi, nhưng cũng cần thực hiện thủ công để có được các tính năng tiện lợi của các triển khai khác. Ví dụ: việc thêm các trường mới vào hàm tạo

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
714 dài dòng và mất thời gian

Ngoài ra, biểu diễn chuỗi mặc định cho các đối tượng được khởi tạo từ các lớp tùy chỉnh không hữu ích lắm. Để khắc phục điều đó, bạn có thể phải thêm phương thức của riêng mình, phương thức này lại thường khá dài dòng và phải được cập nhật mỗi khi bạn thêm trường mới

Các trường được lưu trữ trên các lớp có thể thay đổi và các trường mới có thể được thêm tự do, bạn có thể thích hoặc không thích. Có thể cung cấp nhiều quyền kiểm soát truy cập hơn và tạo các trường chỉ đọc bằng trình trang trí, nhưng một lần nữa, điều này yêu cầu viết nhiều mã keo hơn

Viết một lớp tùy chỉnh là một tùy chọn tuyệt vời bất cứ khi nào bạn muốn thêm hành vi và logic nghiệp vụ vào các đối tượng bản ghi của mình bằng các phương thức. Tuy nhiên, điều này có nghĩa là các đối tượng này về mặt kỹ thuật không còn là đối tượng dữ liệu thuần túy nữa.

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
74

Loại bỏ các quảng cáo

>>> from collections import ChainMap >>> dict1 = {"one": 1, "two": 2} >>> dict2 = {"three": 3, "four": 4} >>> chain = ChainMap(dict1, dict2) >>> chain ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4}) >>> # ChainMap searches each collection in the chain >>> # from left to right until it finds the key (or fails): >>> chain["three"] 3 >>> chain["one"] 1 >>> chain["missing"] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'missing' 717. Trăn 3. Hơn 7 lớp dữ liệu

Các lớp dữ liệu có sẵn trong Python 3. 7 trở lên. Chúng cung cấp một giải pháp thay thế tuyệt vời để xác định các lớp lưu trữ dữ liệu của riêng bạn từ đầu

Bằng cách viết một lớp dữ liệu thay vì một lớp Python thuần túy, các thể hiện đối tượng của bạn sẽ nhận được một vài tính năng hữu ích giúp bạn tiết kiệm một số công việc đánh máy và triển khai thủ công

  • Cú pháp để xác định các biến thể hiện ngắn hơn, vì bạn không cần triển khai phương thức
    >>> from collections import ChainMap
    >>> dict1 = {"one": 1, "two": 2}
    >>> dict2 = {"three": 3, "four": 4}
    >>> chain = ChainMap(dict1, dict2)
    
    >>> chain
    ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})
    
    >>> # ChainMap searches each collection in the chain
    >>> # from left to right until it finds the key (or fails):
    >>> chain["three"]
    3
    >>> chain["one"]
    1
    >>> chain["missing"]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'missing'
    
    718
  • Các phiên bản của lớp dữ liệu của bạn sẽ tự động nhận được biểu diễn chuỗi đẹp mắt thông qua phương thức
    >>> from collections import ChainMap
    >>> dict1 = {"one": 1, "two": 2}
    >>> dict2 = {"three": 3, "four": 4}
    >>> chain = ChainMap(dict1, dict2)
    
    >>> chain
    ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})
    
    >>> # ChainMap searches each collection in the chain
    >>> # from left to right until it finds the key (or fails):
    >>> chain["three"]
    3
    >>> chain["one"]
    1
    >>> chain["missing"]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'missing'
    
    719 được tạo tự động
  • Các biến thể hiện chấp nhận các chú thích kiểu, làm cho lớp dữ liệu của bạn tự ghi lại ở một mức độ nào đó. Hãy nhớ rằng chú thích loại chỉ là gợi ý không được thực thi nếu không có công cụ kiểm tra loại riêng

Các lớp dữ liệu thường được tạo bằng trình trang trí

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
720, như bạn sẽ thấy trong ví dụ mã bên dưới

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
75

Để tìm hiểu thêm về các lớp dữ liệu Python, hãy xem Hướng dẫn cơ bản về các lớp dữ liệu trong Python 3. 7

>>> from collections import ChainMap >>> dict1 = {"one": 1, "two": 2} >>> dict2 = {"three": 3, "four": 4} >>> chain = ChainMap(dict1, dict2) >>> chain ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4}) >>> # ChainMap searches each collection in the chain >>> # from left to right until it finds the key (or fails): >>> chain["three"] 3 >>> chain["one"] 1 >>> chain["missing"] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'missing' 721. Đối tượng dữ liệu thuận tiện

Lớp

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
722 có sẵn trong Python 2. 6+ cung cấp phần mở rộng của kiểu dữ liệu
>>> from types import MappingProxyType
>>> writable = {"one": 1, "two": 2}
>>> read_only = MappingProxyType(writable)

>>> # The proxy is read-only:
>>> read_only["one"]
1
>>> read_only["one"] = 23
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'mappingproxy' object does not support item assignment

>>> # Updates to the original are reflected in the proxy:
>>> writable["one"] = 42
>>> read_only
mappingproxy({'one': 42, 'two': 2})
4 tích hợp. Tương tự như xác định một lớp tùy chỉnh, sử dụng
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
722 cho phép bạn xác định các bản thiết kế có thể tái sử dụng cho các bản ghi của mình để đảm bảo sử dụng đúng tên trường

Các đối tượng

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
722 là bất biến, giống như các bộ dữ liệu thông thường. Điều này có nghĩa là bạn không thể thêm các trường mới hoặc sửa đổi các trường hiện có sau khi tạo phiên bản
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
722

Bên cạnh đó, các đối tượng

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
722, tốt.  .  . bộ dữ liệu được đặt tên. Mỗi đối tượng được lưu trữ trong chúng có thể được truy cập thông qua một mã định danh duy nhất. Điều này giải phóng bạn khỏi việc phải nhớ các chỉ mục số nguyên hoặc sử dụng các giải pháp thay thế như xác định các hằng số nguyên dưới dạng ghi nhớ cho các chỉ mục của bạn

Các đối tượng

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
722 được triển khai bên trong như các lớp Python thông thường. Khi nói đến việc sử dụng bộ nhớ, chúng cũng tốt hơn các lớp thông thường và bộ nhớ hiệu quả như các bộ thông thường

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
76

Các đối tượng

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
722 có thể là một cách dễ dàng để làm sạch mã của bạn và làm cho mã dễ đọc hơn bằng cách thực thi một cấu trúc tốt hơn cho dữ liệu của bạn

Tôi thấy rằng việc chuyển từ các loại dữ liệu đặc biệt như từ điển có định dạng cố định sang các đối tượng

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
722 giúp tôi thể hiện ý định của mã rõ ràng hơn. Thường thì khi tôi áp dụng cách tái cấu trúc này, tôi đã tìm ra một giải pháp tốt hơn một cách kỳ diệu cho vấn đề mà tôi đang gặp phải

Sử dụng các đối tượng

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
722 trên các bộ dữ liệu và lệnh chính (không có cấu trúc) thông thường cũng có thể giúp cuộc sống của đồng nghiệp của bạn trở nên dễ dàng hơn bằng cách làm cho dữ liệu được chuyển qua tự ghi lại, ít nhất là ở một mức độ nào đó

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
77

>>> from collections import ChainMap >>> dict1 = {"one": 1, "two": 2} >>> dict2 = {"three": 3, "four": 4} >>> chain = ChainMap(dict1, dict2) >>> chain ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4}) >>> # ChainMap searches each collection in the chain >>> # from left to right until it finds the key (or fails): >>> chain["three"] 3 >>> chain["one"] 1 >>> chain["missing"] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'missing' 732. Bộ tên được cải thiện

Đã thêm vào Python 3. 6, là em của lớp

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
722 trong học phần
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
31. Nó rất giống với
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
722, với điểm khác biệt chính là cú pháp được cập nhật để xác định các loại bản ghi mới và hỗ trợ thêm cho các gợi ý về loại

Xin lưu ý rằng chú thích loại không được thực thi nếu không có công cụ kiểm tra loại riêng biệt như mypy. Nhưng ngay cả khi không có công cụ hỗ trợ, chúng vẫn có thể cung cấp các gợi ý hữu ích cho các lập trình viên khác (hoặc cực kỳ khó hiểu nếu các gợi ý kiểu đã lỗi thời)

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
78

Loại bỏ các quảng cáo

>>> from collections import ChainMap >>> dict1 = {"one": 1, "two": 2} >>> dict2 = {"three": 3, "four": 4} >>> chain = ChainMap(dict1, dict2) >>> chain ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4}) >>> # ChainMap searches each collection in the chain >>> # from left to right until it finds the key (or fails): >>> chain["three"] 3 >>> chain["one"] 1 >>> chain["missing"] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'missing' 737. Cấu trúc C nối tiếp

Lớp chuyển đổi giữa các giá trị Python và cấu trúc C được tuần tự hóa thành các đối tượng Python

>>> from types import MappingProxyType
>>> writable = {"one": 1, "two": 2}
>>> read_only = MappingProxyType(writable)

>>> # The proxy is read-only:
>>> read_only["one"]
1
>>> read_only["one"] = 23
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'mappingproxy' object does not support item assignment

>>> # Updates to the original are reflected in the proxy:
>>> writable["one"] = 42
>>> read_only
mappingproxy({'one': 42, 'two': 2})
86. Ví dụ: nó có thể được sử dụng để xử lý dữ liệu nhị phân được lưu trữ trong các tệp hoặc đến từ các kết nối mạng

Các cấu trúc được xác định bằng một ngôn ngữ nhỏ dựa trên đó cho phép bạn xác định cách sắp xếp của các loại dữ liệu C khác nhau như

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
740,
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
741 và
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
742 cũng như các biến thể
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
743 của chúng

Các cấu trúc nối tiếp hiếm khi được sử dụng để biểu diễn các đối tượng dữ liệu được xử lý hoàn toàn bên trong mã Python. Chúng được dự định chủ yếu dưới dạng định dạng trao đổi dữ liệu chứ không phải là cách lưu trữ dữ liệu trong bộ nhớ chỉ được sử dụng bởi mã Python

Trong một số trường hợp, việc đóng gói dữ liệu nguyên thủy vào các cấu trúc có thể sử dụng ít bộ nhớ hơn so với việc giữ nó trong các kiểu dữ liệu khác. Tuy nhiên, trong hầu hết các trường hợp, đó sẽ là một tối ưu hóa khá nâng cao (và có lẽ không cần thiết)

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
79

>>> from collections import ChainMap >>> dict1 = {"one": 1, "two": 2} >>> dict2 = {"three": 3, "four": 4} >>> chain = ChainMap(dict1, dict2) >>> chain ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4}) >>> # ChainMap searches each collection in the chain >>> # from left to right until it finds the key (or fails): >>> chain["three"] 3 >>> chain["one"] 1 >>> chain["missing"] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'missing' 744. Quyền truy cập thuộc tính ưa thích

Đây là một lựa chọn hơi khó hiểu hơn để triển khai các đối tượng dữ liệu trong Python. . Lớp này đã được thêm vào Python 3. 3 và cung cấp quyền truy cập thuộc tính vào không gian tên của nó

Điều này có nghĩa là các phiên bản

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
746 hiển thị tất cả các khóa của chúng dưới dạng thuộc tính lớp. Bạn có thể sử dụng quyền truy cập thuộc tính dấu chấm
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
747 thay vì cú pháp lập chỉ mục dấu ngoặc vuông
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
748 được sử dụng bởi các ký tự thông thường. Tất cả các trường hợp cũng bao gồm một
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
715 có ý nghĩa theo mặc định

Đúng như tên gọi của nó,

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
746 rất đơn giản. Về cơ bản, nó là một từ điển cho phép truy cập thuộc tính và in một cách độc đáo. Các thuộc tính có thể được thêm, sửa đổi và xóa tự do

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
90

Bản ghi, cấu trúc và đối tượng dữ liệu trong Python. Tóm lược

Như bạn đã thấy, có khá nhiều tùy chọn khác nhau để triển khai các bản ghi hoặc đối tượng dữ liệu. Bạn nên sử dụng loại nào cho các đối tượng dữ liệu trong Python?

  • Nếu bạn chỉ có một vài trường, thì việc sử dụng một đối tượng tuple đơn giản có thể ổn nếu thứ tự trường dễ nhớ hoặc tên trường không cần thiết. Ví dụ, nghĩ về một điểm

    >>> from collections import ChainMap
    >>> dict1 = {"one": 1, "two": 2}
    >>> dict2 = {"three": 3, "four": 4}
    >>> chain = ChainMap(dict1, dict2)
    
    >>> chain
    ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})
    
    >>> # ChainMap searches each collection in the chain
    >>> # from left to right until it finds the key (or fails):
    >>> chain["three"]
    3
    >>> chain["one"]
    1
    >>> chain["missing"]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'missing'
    
    751 trong không gian ba chiều

  • Nếu bạn cần các trường bất biến, thì các bộ dữ liệu đơn giản,

    >>> from collections import ChainMap
    >>> dict1 = {"one": 1, "two": 2}
    >>> dict2 = {"three": 3, "four": 4}
    >>> chain = ChainMap(dict1, dict2)
    
    >>> chain
    ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})
    
    >>> # ChainMap searches each collection in the chain
    >>> # from left to right until it finds the key (or fails):
    >>> chain["three"]
    3
    >>> chain["one"]
    1
    >>> chain["missing"]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'missing'
    
    721 và
    >>> from collections import ChainMap
    >>> dict1 = {"one": 1, "two": 2}
    >>> dict2 = {"three": 3, "four": 4}
    >>> chain = ChainMap(dict1, dict2)
    
    >>> chain
    ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})
    
    >>> # ChainMap searches each collection in the chain
    >>> # from left to right until it finds the key (or fails):
    >>> chain["three"]
    3
    >>> chain["one"]
    1
    >>> chain["missing"]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'missing'
    
    732 đều là những lựa chọn tốt

  • Nếu bạn cần khóa tên trường để tránh lỗi chính tả, thì

    >>> from collections import ChainMap
    >>> dict1 = {"one": 1, "two": 2}
    >>> dict2 = {"three": 3, "four": 4}
    >>> chain = ChainMap(dict1, dict2)
    
    >>> chain
    ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})
    
    >>> # ChainMap searches each collection in the chain
    >>> # from left to right until it finds the key (or fails):
    >>> chain["three"]
    3
    >>> chain["one"]
    1
    >>> chain["missing"]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'missing'
    
    721 và
    >>> from collections import ChainMap
    >>> dict1 = {"one": 1, "two": 2}
    >>> dict2 = {"three": 3, "four": 4}
    >>> chain = ChainMap(dict1, dict2)
    
    >>> chain
    ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})
    
    >>> # ChainMap searches each collection in the chain
    >>> # from left to right until it finds the key (or fails):
    >>> chain["three"]
    3
    >>> chain["one"]
    1
    >>> chain["missing"]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'missing'
    
    732 là bạn của bạn

  • Nếu bạn muốn giữ mọi thứ đơn giản, thì một đối tượng từ điển đơn giản có thể là một lựa chọn tốt do cú pháp thuận tiện gần giống với JSON

  • Nếu bạn cần toàn quyền kiểm soát cấu trúc dữ liệu của mình, thì đã đến lúc viết một lớp tùy chỉnh với setters và getters

  • Nếu bạn cần thêm hành vi (phương thức) vào đối tượng, thì bạn nên viết một lớp tùy chỉnh, từ đầu hoặc sử dụng trình trang trí

    >>> from collections import ChainMap
    >>> dict1 = {"one": 1, "two": 2}
    >>> dict2 = {"three": 3, "four": 4}
    >>> chain = ChainMap(dict1, dict2)
    
    >>> chain
    ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})
    
    >>> # ChainMap searches each collection in the chain
    >>> # from left to right until it finds the key (or fails):
    >>> chain["three"]
    3
    >>> chain["one"]
    1
    >>> chain["missing"]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'missing'
    
    757 hoặc bằng cách mở rộng
    >>> from collections import ChainMap
    >>> dict1 = {"one": 1, "two": 2}
    >>> dict2 = {"three": 3, "four": 4}
    >>> chain = ChainMap(dict1, dict2)
    
    >>> chain
    ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})
    
    >>> # ChainMap searches each collection in the chain
    >>> # from left to right until it finds the key (or fails):
    >>> chain["three"]
    3
    >>> chain["one"]
    1
    >>> chain["missing"]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'missing'
    
    721 hoặc
    >>> from collections import ChainMap
    >>> dict1 = {"one": 1, "two": 2}
    >>> dict2 = {"three": 3, "four": 4}
    >>> chain = ChainMap(dict1, dict2)
    
    >>> chain
    ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})
    
    >>> # ChainMap searches each collection in the chain
    >>> # from left to right until it finds the key (or fails):
    >>> chain["three"]
    3
    >>> chain["one"]
    1
    >>> chain["missing"]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'missing'
    
    732

  • Nếu bạn cần đóng gói dữ liệu chặt chẽ để đánh số thứ tự vào đĩa hoặc gửi qua mạng, thì đã đến lúc đọc trên

    >>> from collections import ChainMap
    >>> dict1 = {"one": 1, "two": 2}
    >>> dict2 = {"three": 3, "four": 4}
    >>> chain = ChainMap(dict1, dict2)
    
    >>> chain
    ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})
    
    >>> # ChainMap searches each collection in the chain
    >>> # from left to right until it finds the key (or fails):
    >>> chain["three"]
    3
    >>> chain["one"]
    1
    >>> chain["missing"]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'missing'
    
    737 vì đây là một trường hợp sử dụng tuyệt vời cho nó

Nếu bạn đang tìm kiếm một lựa chọn mặc định an toàn, thì đề xuất chung của tôi để triển khai một bản ghi, cấu trúc hoặc đối tượng dữ liệu đơn giản trong Python là sử dụng

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
721 trong Python 2. x và người em của nó,
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
732 trong Python 3

Bộ và Nhiều bộ

Trong phần này, bạn sẽ thấy cách triển khai các cấu trúc dữ liệu tập hợp và nhiều tập hợp (túi) có thể thay đổi và không thay đổi trong Python bằng cách sử dụng các loại và lớp dữ liệu tích hợp sẵn từ thư viện chuẩn

Tập hợp là tập hợp các đối tượng không có thứ tự không cho phép các phần tử trùng lặp. Thông thường, các tập hợp được sử dụng để kiểm tra nhanh một giá trị về tư cách thành viên trong tập hợp, để chèn hoặc xóa các giá trị mới khỏi một tập hợp và để tính toán hợp hoặc giao của hai tập hợp

Trong một triển khai được thiết lập phù hợp, các bài kiểm tra tư cách thành viên dự kiến ​​sẽ chạy trong thời gian O(1) nhanh. Các phép toán hợp, giao, hiệu và tập hợp con sẽ mất trung bình thời gian O(n). Các triển khai đã đặt có trong thư viện chuẩn của Python tuân theo các đặc điểm hiệu suất này

Cũng giống như từ điển, các bộ được xử lý đặc biệt trong Python và có một số đường cú pháp giúp chúng dễ tạo. Ví dụ: cú pháp biểu thức tập hợp dấu ngoặc nhọn và cho phép bạn xác định các trường hợp tập hợp mới một cách thuận tiện

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
91

Nhưng hãy cẩn thận. Để tạo một tập hợp trống, bạn cần gọi hàm tạo

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
763. Sử dụng dấu ngoặc nhọn trống (______1764) là không rõ ràng và thay vào đó sẽ tạo ra một từ điển trống

Python và thư viện tiêu chuẩn của nó cung cấp một số cài đặt được thiết lập. Chúng ta hãy nhìn vào chúng

Loại bỏ các quảng cáo

>>> from collections import ChainMap >>> dict1 = {"one": 1, "two": 2} >>> dict2 = {"three": 3, "four": 4} >>> chain = ChainMap(dict1, dict2) >>> chain ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4}) >>> # ChainMap searches each collection in the chain >>> # from left to right until it finds the key (or fails): >>> chain["three"] 3 >>> chain["one"] 1 >>> chain["missing"] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'missing' 765. Mục tiêu của bạn

Loại là triển khai tập hợp tích hợp trong Python. Nó có thể thay đổi và cho phép chèn và xóa các phần tử động

Các bộ Python được hỗ trợ bởi kiểu dữ liệu ________ 40 và chia sẻ các đặc điểm hiệu suất giống nhau. Bất kỳ đối tượng có thể được lưu trữ trong một tập hợp

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
92

>>> from collections import ChainMap >>> dict1 = {"one": 1, "two": 2} >>> dict2 = {"three": 3, "four": 4} >>> chain = ChainMap(dict1, dict2) >>> chain ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4}) >>> # ChainMap searches each collection in the chain >>> # from left to right until it finds the key (or fails): >>> chain["three"] 3 >>> chain["one"] 1 >>> chain["missing"] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'missing' 768. Bộ bất biến

Lớp thực hiện một phiên bản không thể thay đổi của

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
765 không thể thay đổi sau khi nó được xây dựng

Các đối tượng

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
768 là tĩnh và chỉ cho phép các thao tác truy vấn trên các phần tử của chúng, không cho phép chèn hoặc xóa. Bởi vì các đối tượng
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
768 là tĩnh và có thể băm, nên chúng có thể được sử dụng làm khóa từ điển hoặc làm thành phần của một tập hợp khác, điều không thể thực hiện được với các đối tượng
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
765 thông thường (có thể thay đổi)

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
93

>>> from collections import ChainMap >>> dict1 = {"one": 1, "two": 2} >>> dict2 = {"three": 3, "four": 4} >>> chain = ChainMap(dict1, dict2) >>> chain ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4}) >>> # ChainMap searches each collection in the chain >>> # from left to right until it finds the key (or fails): >>> chain["three"] 3 >>> chain["one"] 1 >>> chain["missing"] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'missing' 774. nhiều bộ

Lớp trong thư viện chuẩn Python triển khai một loại nhiều tập hợp hoặc túi cho phép các phần tử trong tập hợp có nhiều lần xuất hiện

Điều này hữu ích nếu bạn cần theo dõi không chỉ một phần tử có phải là một phần của tập hợp hay không mà còn bao nhiêu lần phần tử đó được bao gồm trong tập hợp

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
94

Một lưu ý đối với lớp

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
776 là bạn sẽ phải cẩn thận khi đếm số phần tử trong một đối tượng
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
776. Gọi
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
778 trả về số lượng phần tử duy nhất trong nhiều tập hợp, trong khi tổng số phần tử có thể được truy xuất bằng cách sử dụng
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
779

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
95

Sets và Multisets trong Python. Tóm lược

Bộ là một cấu trúc dữ liệu hữu ích và thường được sử dụng khác có trong Python và thư viện chuẩn của nó. Dưới đây là một vài hướng dẫn để quyết định nên sử dụng cái nào

  • Nếu bạn cần một bộ có thể thay đổi, thì hãy sử dụng loại
    >>> from collections import ChainMap
    >>> dict1 = {"one": 1, "two": 2}
    >>> dict2 = {"three": 3, "four": 4}
    >>> chain = ChainMap(dict1, dict2)
    
    >>> chain
    ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})
    
    >>> # ChainMap searches each collection in the chain
    >>> # from left to right until it finds the key (or fails):
    >>> chain["three"]
    3
    >>> chain["one"]
    1
    >>> chain["missing"]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'missing'
    
    765 tích hợp
  • Nếu bạn cần các đối tượng có thể băm có thể được sử dụng làm từ điển hoặc đặt khóa, thì hãy sử dụng
    >>> from collections import ChainMap
    >>> dict1 = {"one": 1, "two": 2}
    >>> dict2 = {"three": 3, "four": 4}
    >>> chain = ChainMap(dict1, dict2)
    
    >>> chain
    ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})
    
    >>> # ChainMap searches each collection in the chain
    >>> # from left to right until it finds the key (or fails):
    >>> chain["three"]
    3
    >>> chain["one"]
    1
    >>> chain["missing"]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'missing'
    
    768
  • Nếu bạn cần cấu trúc dữ liệu nhiều bộ hoặc túi, thì hãy sử dụng
    >>> from collections import ChainMap
    >>> dict1 = {"one": 1, "two": 2}
    >>> dict2 = {"three": 3, "four": 4}
    >>> chain = ChainMap(dict1, dict2)
    
    >>> chain
    ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})
    
    >>> # ChainMap searches each collection in the chain
    >>> # from left to right until it finds the key (or fails):
    >>> chain["three"]
    3
    >>> chain["one"]
    1
    >>> chain["missing"]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'missing'
    
    774

Ngăn xếp (LIFO)

A là một tập hợp các đối tượng hỗ trợ ngữ nghĩa Last-In/First-Out (LIFO) nhanh chóng để chèn và xóa. Không giống như danh sách hoặc mảng, ngăn xếp thường không cho phép truy cập ngẫu nhiên vào các đối tượng mà chúng chứa. Thao tác chèn và xóa cũng thường được gọi là đẩy và bật

Một phép loại suy hữu ích trong thế giới thực cho cấu trúc dữ liệu ngăn xếp là một chồng các tấm. Các đĩa mới được thêm vào trên cùng của ngăn xếp và vì các đĩa này rất quý và nặng nên chỉ có thể di chuyển đĩa trên cùng. Nói cách khác, tấm cuối cùng trong ngăn xếp phải là tấm đầu tiên được lấy ra (LIFO). Để tiếp cận các tấm thấp hơn trong ngăn xếp, các tấm trên cùng phải được lấy ra từng cái một

Xét về mặt hiệu suất, việc triển khai ngăn xếp phù hợp dự kiến ​​sẽ mất O(1) thời gian cho các thao tác chèn và xóa

Ngăn xếp có nhiều ứng dụng trong thuật toán. Ví dụ: chúng được sử dụng trong phân tích cú pháp ngôn ngữ cũng như quản lý bộ nhớ thời gian chạy, dựa trên ngăn xếp cuộc gọi. Một thuật toán ngắn và đẹp sử dụng ngăn xếp là tìm kiếm theo chiều sâu (DFS) trên cấu trúc dữ liệu dạng cây hoặc biểu đồ

Python cung cấp một số triển khai ngăn xếp mà mỗi triển khai có các đặc điểm hơi khác nhau. Hãy xem xét chúng và so sánh đặc điểm của chúng

Loại bỏ các quảng cáo

>>> from collections import ChainMap >>> dict1 = {"one": 1, "two": 2} >>> dict2 = {"three": 3, "four": 4} >>> chain = ChainMap(dict1, dict2) >>> chain ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4}) >>> # ChainMap searches each collection in the chain >>> # from left to right until it finds the key (or fails): >>> chain["three"] 3 >>> chain["one"] 1 >>> chain["missing"] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'missing' 6. Ngăn xếp đơn giản, tích hợp sẵn

Loại

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
6 tích hợp sẵn của Python vì nó hỗ trợ các thao tác đẩy và bật trong thời gian khấu hao O(1)

Các danh sách của Python được triển khai dưới dạng các mảng động bên trong, điều đó có nghĩa là đôi khi chúng cần thay đổi kích thước không gian lưu trữ cho các phần tử được lưu trữ trong chúng khi các phần tử được thêm hoặc xóa. Danh sách phân bổ quá mức lưu trữ sao lưu của nó để không phải mọi thao tác đẩy hoặc bật đều yêu cầu thay đổi kích thước. Kết quả là bạn nhận được độ phức tạp thời gian O(1) được khấu hao cho các thao tác này

Nhược điểm là điều này làm cho hiệu suất của chúng kém nhất quán hơn so với các thao tác chèn và xóa O(1) ổn định được cung cấp bởi triển khai dựa trên danh sách được liên kết (như bạn sẽ thấy bên dưới với

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
785). Mặt khác, các danh sách cung cấp quyền truy cập ngẫu nhiên thời gian O(1) nhanh vào các phần tử trên ngăn xếp và đây có thể là một lợi ích bổ sung

Có một cảnh báo hiệu suất quan trọng mà bạn nên biết khi sử dụng danh sách dưới dạng ngăn xếp. Để có được hiệu suất khấu hao O(1) cho các lần chèn và xóa, các mục mới phải được thêm vào cuối danh sách bằng phương pháp

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
786 và xóa lại từ cuối bằng cách sử dụng
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
787. Để có hiệu suất tối ưu, các ngăn xếp dựa trên danh sách Python sẽ phát triển theo chỉ mục cao hơn và thu hẹp về phía thấp hơn

Thêm và xóa từ phía trước chậm hơn nhiều và mất O(n) thời gian, vì các phần tử hiện có phải được dịch chuyển xung quanh để nhường chỗ cho phần tử mới. Đây là một phản mẫu hiệu suất mà bạn nên tránh càng nhiều càng tốt

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
96

>>> from collections import ChainMap >>> dict1 = {"one": 1, "two": 2} >>> dict2 = {"three": 3, "four": 4} >>> chain = ChainMap(dict1, dict2) >>> chain ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4}) >>> # ChainMap searches each collection in the chain >>> # from left to right until it finds the key (or fails): >>> chain["three"] 3 >>> chain["one"] 1 >>> chain["missing"] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'missing' 785. Ngăn xếp nhanh và mạnh mẽ

Lớp thực hiện hỗ trợ thêm và xóa các phần tử từ một trong hai đầu trong thời gian O(1) (không phân bổ). Bởi vì deques hỗ trợ thêm và xóa các phần tử từ một trong hai đầu tốt như nhau, nên chúng có thể phục vụ cả dưới dạng hàng đợi và dưới dạng ngăn xếp

Các đối tượng

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
789 của Python được triển khai dưới dạng , mang lại cho chúng hiệu suất tuyệt vời và nhất quán để chèn và xóa các phần tử nhưng hiệu suất O(n) kém khi truy cập ngẫu nhiên các phần tử ở giữa ngăn xếp

Nhìn chung, nếu bạn đang tìm kiếm cấu trúc dữ liệu ngăn xếp trong thư viện chuẩn của Python có các đặc điểm hiệu suất của việc triển khai danh sách liên kết

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
97

>>> from collections import ChainMap >>> dict1 = {"one": 1, "two": 2} >>> dict2 = {"three": 3, "four": 4} >>> chain = ChainMap(dict1, dict2) >>> chain ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4}) >>> # ChainMap searches each collection in the chain >>> # from left to right until it finds the key (or fails): >>> chain["three"] 3 >>> chain["one"] 1 >>> chain["missing"] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'missing' 792. Khóa ngữ nghĩa cho điện toán song song

Việc triển khai ngăn xếp trong thư viện chuẩn Python được đồng bộ hóa và cung cấp ngữ nghĩa khóa để hỗ trợ nhiều nhà sản xuất và người tiêu dùng đồng thời

Bên cạnh

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
793, mô-đun
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
795 chứa một số lớp khác triển khai hàng đợi nhiều nhà sản xuất, nhiều người tiêu dùng hữu ích cho tính toán song song

Tùy thuộc vào trường hợp sử dụng của bạn, ngữ nghĩa khóa có thể hữu ích hoặc chúng có thể phát sinh chi phí không cần thiết. Trong trường hợp này, tốt hơn hết bạn nên sử dụng

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
6 hoặc
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
789 làm ngăn xếp cho mục đích chung

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
98

Triển khai ngăn xếp trong Python. Tóm lược

Như bạn đã thấy, Python cung cấp một số triển khai cho cấu trúc dữ liệu ngăn xếp. Tất cả chúng đều có những đặc điểm hơi khác nhau cũng như sự đánh đổi về hiệu suất và cách sử dụng

Nếu bạn không tìm kiếm hỗ trợ xử lý song song (hoặc nếu bạn không muốn xử lý khóa và mở khóa theo cách thủ công), thì lựa chọn của bạn thuộc về loại

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
6 tích hợp sẵn hoặc
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
785. Sự khác biệt nằm ở cấu trúc dữ liệu được sử dụng ở hậu trường và tính dễ sử dụng nói chung

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
6 được hỗ trợ bởi một mảng động, điều này làm cho nó trở nên tuyệt vời để truy cập ngẫu nhiên nhanh nhưng đôi khi yêu cầu thay đổi kích thước khi thêm hoặc xóa các phần tử

Danh sách phân bổ quá mức lưu trữ sao lưu của nó để không phải mọi thao tác đẩy hoặc bật đều yêu cầu thay đổi kích thước và bạn nhận được độ phức tạp thời gian O(1) được khấu hao cho các thao tác này. Nhưng bạn cần cẩn thận chỉ chèn và xóa các mục bằng cách sử dụng

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
786 và
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
787. Mặt khác, hiệu suất chậm lại thành O(n)

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
785 được hỗ trợ bởi danh sách liên kết đôi, giúp tối ưu hóa việc thêm và xóa ở cả hai đầu và cung cấp hiệu suất O(1) nhất quán cho các hoạt động này. Không chỉ hoạt động ổn định hơn, lớp
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
789 còn dễ sử dụng hơn vì bạn không phải lo lắng về việc thêm hoặc bớt các mục từ sai mục đích

Tóm lại,

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
785 là một lựa chọn tuyệt vời để triển khai ngăn xếp (hàng đợi LIFO) trong Python

Loại bỏ các quảng cáo

Hàng đợi (FIFO)

Trong phần này, bạn sẽ thấy cách triển khai cấu trúc dữ liệu hàng đợi Nhập trước/Xuất trước (FIFO) chỉ sử dụng các loại và lớp dữ liệu tích hợp sẵn từ thư viện chuẩn Python

A là tập hợp các đối tượng hỗ trợ ngữ nghĩa FIFO nhanh để chèn và xóa. Thao tác chèn và xóa đôi khi được gọi là enqueue và dequeue. Không giống như danh sách hoặc mảng, hàng đợi thường không cho phép truy cập ngẫu nhiên vào các đối tượng mà chúng chứa

Đây là một sự tương tự trong thế giới thực cho hàng đợi FIFO

Hãy tưởng tượng một hàng Pythonistas đang chờ nhận huy hiệu hội nghị của họ vào ngày đầu tiên đăng ký PyCon. Khi những người mới vào địa điểm tổ chức hội nghị và xếp hàng để nhận huy hiệu của họ, họ sẽ xếp hàng (enqueue) ở cuối hàng đợi. Các nhà phát triển nhận huy hiệu và túi swag hội nghị của họ, sau đó thoát khỏi hàng (dequeue) ở phía trước hàng đợi

Một cách khác để ghi nhớ các đặc điểm của cấu trúc dữ liệu hàng đợi là coi nó như một đường ống. Bạn thêm các quả bóng bàn vào một đầu và chúng di chuyển đến đầu kia, nơi bạn loại bỏ chúng. Trong khi các quả bóng nằm trong hàng đợi (một ống kim loại đặc), bạn không thể lấy chúng. Cách duy nhất để tương tác với các quả bóng trong hàng đợi là thêm những quả bóng mới ở phía sau đường ống (enqueue) hoặc loại bỏ chúng ở phía trước (dequeue)

Hàng đợi tương tự như ngăn xếp. Sự khác biệt giữa chúng nằm ở cách loại bỏ các mục. Với hàng đợi, bạn xóa mục được thêm gần đây nhất (FIFO) nhưng với ngăn xếp, bạn xóa mục được thêm gần đây nhất (LIFO)

Về mặt hiệu suất, việc triển khai hàng đợi phù hợp dự kiến ​​sẽ mất O(1) thời gian cho các thao tác chèn và xóa. Đây là hai thao tác chính được thực hiện trên hàng đợi và nếu được triển khai đúng cách, chúng phải nhanh

Hàng đợi có nhiều ứng dụng trong thuật toán và thường giúp giải các bài toán lập lịch và lập trình song song. Thuật toán ngắn và đẹp sử dụng hàng đợi là tìm kiếm theo chiều rộng (BFS) trên cấu trúc dữ liệu dạng cây hoặc biểu đồ

Các thuật toán lập lịch thường sử dụng hàng đợi ưu tiên bên trong. Đây là những hàng đợi chuyên biệt. Thay vì truy xuất phần tử tiếp theo theo thời gian chèn, a truy xuất phần tử có mức độ ưu tiên cao nhất. Mức độ ưu tiên của các phần tử riêng lẻ được quyết định bởi hàng đợi dựa trên thứ tự được áp dụng cho các khóa của chúng

Tuy nhiên, một hàng đợi thông thường sẽ không sắp xếp lại thứ tự các vật phẩm mà nó mang theo. Giống như trong ví dụ về đường ống, bạn lấy ra những gì bạn đã đưa vào và theo đúng thứ tự đó

Python vận chuyển với một số triển khai hàng đợi mà mỗi triển khai có các đặc điểm hơi khác nhau. Hãy xem xét chúng

>>> from collections import ChainMap >>> dict1 = {"one": 1, "two": 2} >>> dict2 = {"three": 3, "four": 4} >>> chain = ChainMap(dict1, dict2) >>> chain ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4}) >>> # ChainMap searches each collection in the chain >>> # from left to right until it finds the key (or fails): >>> chain["three"] 3 >>> chain["one"] 1 >>> chain["missing"] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'missing' 6. Xếp hàng chậm khủng khiếp

Có thể, nhưng điều này không lý tưởng từ góc độ hiệu suất. Danh sách khá chậm cho mục đích này vì việc chèn hoặc xóa một phần tử ngay từ đầu yêu cầu chuyển tất cả các phần tử khác theo từng phần một, yêu cầu thời gian O(n)

Do đó, tôi không khuyên bạn nên sử dụng

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
6 làm hàng đợi tạm thời trong Python trừ khi bạn chỉ xử lý một số phần tử nhỏ

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
99

>>> from collections import ChainMap >>> dict1 = {"one": 1, "two": 2} >>> dict2 = {"three": 3, "four": 4} >>> chain = ChainMap(dict1, dict2) >>> chain ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4}) >>> # ChainMap searches each collection in the chain >>> # from left to right until it finds the key (or fails): >>> chain["three"] 3 >>> chain["one"] 1 >>> chain["missing"] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'missing' 785. Hàng đợi nhanh và mạnh mẽ

Lớp

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
789 triển khai hàng đợi hai đầu hỗ trợ thêm và xóa các phần tử ở hai đầu trong thời gian O(1) (không phân bổ). Bởi vì deques hỗ trợ thêm và xóa các phần tử từ một trong hai đầu tốt như nhau, nên chúng có thể phục vụ cả dưới dạng hàng đợi và dưới dạng ngăn xếp

Các đối tượng

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
789 của Python được triển khai dưới dạng danh sách liên kết kép. Điều này mang lại cho chúng hiệu suất tuyệt vời và nhất quán để chèn và xóa các phần tử, nhưng hiệu suất O(n) kém khi truy cập ngẫu nhiên các phần tử ở giữa ngăn xếp

Do đó,

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
785 là lựa chọn mặc định tuyệt vời nếu bạn đang tìm kiếm cấu trúc dữ liệu hàng đợi trong thư viện chuẩn của Python

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
0

>>> from collections import ChainMap >>> dict1 = {"one": 1, "two": 2} >>> dict2 = {"three": 3, "four": 4} >>> chain = ChainMap(dict1, dict2) >>> chain ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4}) >>> # ChainMap searches each collection in the chain >>> # from left to right until it finds the key (or fails): >>> chain["three"] 3 >>> chain["one"] 1 >>> chain["missing"] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'missing' 913. Khóa ngữ nghĩa cho điện toán song song

Việc triển khai trong thư viện chuẩn Python được đồng bộ hóa và cung cấp ngữ nghĩa khóa để hỗ trợ nhiều nhà sản xuất và người tiêu dùng đồng thời

Mô-đun

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
795 chứa một số lớp khác triển khai hàng đợi nhiều nhà sản xuất, nhiều người tiêu dùng hữu ích cho tính toán song song

Tùy thuộc vào trường hợp sử dụng của bạn, ngữ nghĩa khóa có thể hữu ích hoặc chỉ phát sinh chi phí không cần thiết. Trong trường hợp này, tốt hơn hết bạn nên sử dụng

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
785 làm hàng đợi cho mục đích chung

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
1

>>> from collections import ChainMap >>> dict1 = {"one": 1, "two": 2} >>> dict2 = {"three": 3, "four": 4} >>> chain = ChainMap(dict1, dict2) >>> chain ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4}) >>> # ChainMap searches each collection in the chain >>> # from left to right until it finds the key (or fails): >>> chain["three"] 3 >>> chain["one"] 1 >>> chain["missing"] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'missing' 917. Hàng đợi công việc được chia sẻ

là một triển khai hàng đợi công việc được chia sẻ cho phép các mục trong hàng đợi được xử lý song song bởi nhiều công nhân đồng thời. Song song hóa dựa trên quy trình phổ biến trong CPython do khóa trình thông dịch toàn cầu (GIL) ngăn chặn một số hình thức thực thi song song trên một quy trình thông dịch viên

Là một triển khai hàng đợi chuyên biệt dùng để chia sẻ dữ liệu giữa các quy trình,

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
917 giúp dễ dàng phân phối công việc trên nhiều quy trình để khắc phục các hạn chế của GIL. Loại hàng đợi này có thể lưu trữ và chuyển bất kỳ đối tượng có thể chọn nào qua các ranh giới quy trình

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
2

Hàng đợi trong Python. Tóm lược

Python bao gồm một số triển khai hàng đợi như một phần của ngôn ngữ cốt lõi và thư viện chuẩn của nó

Các đối tượng

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
6 có thể được sử dụng làm hàng đợi, nhưng điều này thường không được khuyến nghị do hiệu suất chậm

Nếu bạn không tìm kiếm hỗ trợ xử lý song song, thì việc triển khai do

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
785 cung cấp là một lựa chọn mặc định tuyệt vời để triển khai cấu trúc dữ liệu hàng đợi FIFO trong Python. Nó cung cấp các đặc điểm hiệu suất mà bạn mong đợi từ việc triển khai hàng đợi tốt và cũng có thể được sử dụng làm ngăn xếp (hàng đợi LIFO)

hàng đợi ưu tiên

A là cấu trúc dữ liệu vùng chứa quản lý một tập hợp các bản ghi với các khóa được sắp xếp theo thứ tự hoàn chỉnh để cung cấp khả năng truy cập nhanh vào bản ghi bằng khóa nhỏ nhất hoặc lớn nhất trong tập hợp

Bạn có thể coi hàng đợi ưu tiên là hàng đợi đã sửa đổi. Thay vì truy xuất phần tử tiếp theo theo thời gian chèn, nó truy xuất phần tử có mức độ ưu tiên cao nhất. Mức độ ưu tiên của các phần tử riêng lẻ được quyết định theo thứ tự áp dụng cho các khóa của chúng

Hàng đợi ưu tiên thường được sử dụng để xử lý các vấn đề lập lịch trình. Ví dụ: bạn có thể sử dụng chúng để ưu tiên cho các nhiệm vụ có mức độ khẩn cấp cao hơn

Hãy nghĩ về công việc của một bộ lập lịch tác vụ hệ điều hành

Lý tưởng nhất là các tác vụ có mức độ ưu tiên cao hơn trên hệ thống (chẳng hạn như chơi trò chơi thời gian thực) nên được ưu tiên hơn các tác vụ có mức độ ưu tiên thấp hơn (chẳng hạn như tải xuống các bản cập nhật ở chế độ nền). Bằng cách sắp xếp các tác vụ đang chờ xử lý trong hàng đợi ưu tiên sử dụng mức độ khẩn cấp của tác vụ làm chìa khóa, bộ lập lịch tác vụ có thể nhanh chóng chọn các tác vụ có mức độ ưu tiên cao nhất và cho phép chúng chạy trước.

Trong phần này, bạn sẽ thấy một vài tùy chọn về cách bạn có thể triển khai hàng đợi ưu tiên trong Python bằng cấu trúc dữ liệu tích hợp hoặc cấu trúc dữ liệu có trong thư viện chuẩn của Python. Mỗi cách triển khai sẽ có những ưu điểm và nhược điểm riêng, nhưng theo tôi, có một người chiến thắng rõ ràng cho hầu hết các tình huống phổ biến. Hãy cùng tìm hiểu xem đó là cái nào

>>> from collections import ChainMap >>> dict1 = {"one": 1, "two": 2} >>> dict2 = {"three": 3, "four": 4} >>> chain = ChainMap(dict1, dict2) >>> chain ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4}) >>> # ChainMap searches each collection in the chain >>> # from left to right until it finds the key (or fails): >>> chain["three"] 3 >>> chain["one"] 1 >>> chain["missing"] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'missing' 6. Hàng đợi được sắp xếp thủ công

Bạn có thể sử dụng một

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
6 đã sắp xếp để nhanh chóng xác định và xóa phần tử nhỏ nhất hoặc lớn nhất. Nhược điểm là việc chèn các phần tử mới vào danh sách là thao tác O(n) chậm

Mặc dù điểm chèn có thể được tìm thấy trong thời gian O(log n) bằng cách sử dụng trong thư viện chuẩn, điều này luôn bị chi phối bởi bước chèn chậm

Duy trì thứ tự bằng cách thêm vào danh sách và sắp xếp lại cũng mất ít nhất O(n log n) thời gian. Một nhược điểm khác là bạn phải sắp xếp lại danh sách theo cách thủ công khi các phần tử mới được chèn vào. Thật dễ dàng để đưa ra các lỗi bằng cách bỏ lỡ bước này và gánh nặng luôn thuộc về bạn, nhà phát triển

Điều này có nghĩa là danh sách được sắp xếp chỉ phù hợp làm hàng đợi ưu tiên khi sẽ có ít lần chèn

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
3

>>> from collections import ChainMap >>> dict1 = {"one": 1, "two": 2} >>> dict2 = {"three": 3, "four": 4} >>> chain = ChainMap(dict1, dict2) >>> chain ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4}) >>> # ChainMap searches each collection in the chain >>> # from left to right until it finds the key (or fails): >>> chain["three"] 3 >>> chain["one"] 1 >>> chain["missing"] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'missing' 925. Đống nhị phân dựa trên danh sách

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
925 là một triển khai heap nhị phân thường được hỗ trợ bởi một
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
6 đơn giản và nó hỗ trợ chèn và trích xuất phần tử nhỏ nhất trong thời gian O(log n)

Mô-đun này là một lựa chọn tốt để triển khai hàng đợi ưu tiên trong Python. Vì về mặt kỹ thuật,

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
925 chỉ cung cấp triển khai min-heap, để đảm bảo tính ổn định của sắp xếp và các tính năng khác thường được mong đợi từ hàng đợi ưu tiên thực tế

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
4

>>> from collections import ChainMap >>> dict1 = {"one": 1, "two": 2} >>> dict2 = {"three": 3, "four": 4} >>> chain = ChainMap(dict1, dict2) >>> chain ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4}) >>> # ChainMap searches each collection in the chain >>> # from left to right until it finds the key (or fails): >>> chain["three"] 3 >>> chain["one"] 1 >>> chain["missing"] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'missing' 929. Hàng đợi ưu tiên đẹp

sử dụng

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
925 trong nội bộ và chia sẻ cùng độ phức tạp về thời gian và không gian. Sự khác biệt là
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
932 được đồng bộ hóa và cung cấp ngữ nghĩa khóa để hỗ trợ nhiều nhà sản xuất và người tiêu dùng đồng thời

Tùy thuộc vào trường hợp sử dụng của bạn, điều này có thể hữu ích hoặc có thể làm chậm chương trình của bạn một chút. Trong mọi trường hợp, bạn có thể thích giao diện dựa trên lớp do

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
932 cung cấp hơn giao diện dựa trên chức năng do
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
925 cung cấp

>>>

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
5

Hàng đợi ưu tiên trong Python. Tóm lược

Python bao gồm một số triển khai hàng đợi ưu tiên sẵn sàng để bạn sử dụng

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
929 nổi bật với giao diện hướng đối tượng đẹp mắt và cái tên nêu rõ ý định của nó. Nó nên là sự lựa chọn ưa thích của bạn

Nếu bạn muốn tránh chi phí khóa của

>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
929, thì sử dụng trực tiếp mô-đun
>>> from collections import ChainMap
>>> dict1 = {"one": 1, "two": 2}
>>> dict2 = {"three": 3, "four": 4}
>>> chain = ChainMap(dict1, dict2)

>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})

>>> # ChainMap searches each collection in the chain
>>> # from left to right until it finds the key (or fails):
>>> chain["three"]
3
>>> chain["one"]
1
>>> chain["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'
925 cũng là một lựa chọn tốt

Phần kết luận. Cấu trúc dữ liệu Python

Điều đó kết thúc chuyến tham quan của bạn về các cấu trúc dữ liệu phổ biến trong Python. Với kiến ​​thức bạn có được ở đây, bạn đã sẵn sàng triển khai các cấu trúc dữ liệu hiệu quả phù hợp với thuật toán hoặc trường hợp sử dụng cụ thể của mình

Trong hướng dẫn này, bạn đã học

  • Những kiểu dữ liệu trừu tượng phổ biến nào được tích hợp sẵn trong thư viện chuẩn Python
  • Cách các loại dữ liệu trừu tượng phổ biến nhất ánh xạ tới sơ đồ đặt tên của Python
  • Cách đưa các kiểu dữ liệu trừu tượng vào sử dụng thực tế trong các thuật toán khác nhau

Nếu bạn thích những gì bạn học được trong ví dụ này từ Thủ thuật Python, thì hãy nhớ xem phần còn lại của cuốn sách

Nếu bạn quan tâm đến việc nâng cao kiến ​​thức chung về cấu trúc dữ liệu của mình, thì tôi thực sự khuyên bạn nên dùng Steven S. Hướng dẫn thiết kế thuật toán của Skiena. Nó tạo ra sự cân bằng tuyệt vời giữa việc dạy bạn các cấu trúc dữ liệu cơ bản (và nâng cao hơn) và chỉ cho bạn cách triển khai chúng trong mã của bạn. Cuốn sách của Steve đã giúp ích rất nhiều cho việc viết bài hướng dẫn này

Đánh dấu là đã hoàn thành

Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Ngăn xếp và hàng đợi. Chọn cấu trúc dữ liệu lý tưởng

🐍 Thủ thuật Python 💌

Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python

Cấu trúc động trong Python là gì?

Gửi cho tôi thủ thuật Python »

Giới thiệu về Dan Bader

Cấu trúc động trong Python là gì?
Cấu trúc động trong Python là gì?

Dan Bader là chủ sở hữu và tổng biên tập của Real Python và là nhà phát triển chính của realpython. nền tảng học tập com. Dan đã viết mã hơn 20 năm và có bằng thạc sĩ về khoa học máy tính

» Thông tin thêm về Đan


Mỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là

Cấu trúc động trong Python là gì?

Aldren

Cấu trúc động trong Python là gì?

David

Cấu trúc động trong Python là gì?

Joanna

Cấu trúc động trong Python là gì?

Gia-cốp

Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bậc thầy Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bạn nghĩ sao?

Đánh giá bài viết này

Tweet Chia sẻ Chia sẻ Email

Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?

Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi

Cơ cấu động là gì?

Động học kết cấu là một loại phân tích kết cấu bao gồm hành vi của kết cấu chịu tải trọng động (tác động có gia tốc cao) . Tải trọng động bao gồm con người, gió, sóng, giao thông, động đất và nổ.

Ví dụ cấu trúc dữ liệu động là gì?

Danh sách động trong cấu trúc dữ liệu là gì?

Trong khoa học máy tính, mảng động, mảng có thể phát triển, mảng có thể thay đổi kích thước, bảng động, mảng có thể thay đổi hoặc danh sách mảng là cấu trúc dữ liệu danh sách có kích thước thay đổi, truy cập ngẫu nhiên cho phép . Nó được cung cấp với các thư viện tiêu chuẩn trong nhiều ngôn ngữ lập trình chính thống hiện đại. . It is supplied with standard libraries in many modern mainstream programming languages.

Là cấu trúc dữ liệu động mảng trong Python?

Python không cung cấp cấu trúc dữ liệu mảng thông thường như Java hay C++. Một điểm khác biệt lớn về cách mảng được triển khai trong Python là chúng không phải là mảng bình thường, chúng là mảng động . Một mảng động có thuộc tính tự động thay đổi kích thước.