Hướng dẫn how do you maintain a set order in python? - làm thế nào để bạn duy trì một trật tự đã đặt trong python?

Trong toán học, có các bộ và bộ đặt hàng (OSET).

  • Đặt: Một thùng chứa không có thứ tự của các yếu tố duy nhất (được triển khai)
  • OSET: Một container được đặt hàng gồm các yếu tố duy nhất (đã được thực hiện)

Trong Python, chỉ các bộ được thực hiện trực tiếp. Chúng ta có thể mô phỏng các OSET với các phím Dict thông thường (3.7+).

Được

a = [1, 2, 20, 6, 210, 2, 1]
b = {2, 6}

Mã số

oset = dict.fromkeys(a).keys()
# dict_keys([1, 2, 20, 6, 210])

Thử nghiệm

Các bản sao được loại bỏ, thứ tự chèn được bảo tồn.

list(oset)
# [1, 2, 20, 6, 210]

Các hoạt động giống như thiết lập trên các khóa Dict.

oset - b
# {1, 20, 210}

oset | b
# {1, 2, 5, 6, 20, 210}

oset & b
# {2, 6}

oset ^ b
# {1, 5, 20, 210}

Thông tin chi tiết

Lưu ý: Một cấu trúc không theo thứ tự không loại trừ các yếu tố được đặt hàng. Thay vào đó, trật tự được duy trì không được đảm bảo. Thí dụ:

assert {1, 2, 3} == {2, 3, 1}                    # sets (order is ignored)
assert [1, 2, 3] != [2, 3, 1]                    # lists (order is guaranteed)

Người ta có thể hài lòng khi phát hiện ra rằng một danh sách và multiset (MSET) là hai cấu trúc dữ liệu toán học hấp dẫn hơn:

  • Danh sách: Một thùng chứa được đặt hàng của các phần tử cho phép bản sao (đã triển khai)
  • MSET: Một thùng chứa không có thứ tự cho phép các bản sao (không kích thích)*

Bản tóm tắt

Container | Ordered | Unique | Implemented
----------|---------|--------|------------
set       |    n    |    y   |     y
oset      |    y    |    y   |     n
list      |    y    |    n   |     y
mset      |    n    |    n   |     n*  

*Một multiset có thể được mô phỏng gián tiếp với

list(oset)
# [1, 2, 20, 6, 210]
8, một ánh xạ giống như chính thức của bội số (số lượng).

Lập trình chủ yếu là về việc xử lý dữ liệu. Là một nhà phát triển Python, bạn sẽ tìm cách lưu trữ dữ liệu theo cách phù hợp với các mục tiêu của bạn. Đôi khi, bạn sẽ cần bảo quản thứ tự chèn dữ liệu trong một bộ, ví dụ, nếu bạn đang xử lý các giao dịch ngân hàng. Mỗi giao dịch phải là duy nhất, và điều quan trọng là bảo tồn thứ tự các giao dịch được tạo. Các bộ đặt hàng Python đã giúp bạn làm điều đó.

Trong bài viết này, chúng tôi sẽ giải thích khái niệm lập trình của một tập hợp được đặt hàng, trước khi chỉ cho bạn cách tạo một trong chương trình Python.

Một bộ trong Python là gì?

Trong ngôn ngữ lập trình Python, một bộ là một tập hợp các yếu tố độc đáo. Đó là một cấu trúc dữ liệu dựa trên bảng băm với thứ tự phần tử không xác định. Bạn có thể duyệt một phần tử tập hợp, thêm hoặc xóa chúng và thực hiện các hoạt động thiết lập tiêu chuẩn của liên minh, giao lộ, bổ sung và khác biệt.

Không giống như danh sách, các bộ thông thường không bảo tồn thứ tự mà chúng tôi chèn các yếu tố. Điều này là do các phần tử trong một bộ thường không được lưu trữ theo thứ tự chúng xuất hiện. & NBSP;

Bộ đặt hàng là gì?

Không giống như trong một bộ tiêu chuẩn, thứ tự của dữ liệu trong một tập hợp được đặt hàng được bảo tồn. Chúng tôi đã sử dụng các bộ được đặt hàng khi chúng tôi cần thứ tự chúng tôi nhập dữ liệu để được duy trì trong suốt quá trình của chương trình. Trong một tập hợp được đặt hàng, nhìn vào dữ liệu không thay đổi thứ tự như trong một tập hợp không được đặt hàng.

Các bộ luôn luôn được sắp xếp Python?

Danh sách. Sắp xếp () đã thiết lập quy ước sắp xếp () sắp xếp đối tượng tại chỗ, nhưng một tập hợp không thể được sắp xếp tại chỗ vì các bộ không được đặt hàng.

Lập trình chủ yếu là về việc xử lý dữ liệu. Là một nhà phát triển Python, bạn sẽ tìm cách lưu trữ dữ liệu theo cách phù hợp với các mục tiêu của bạn. Đôi khi, bạn sẽ cần bảo quản thứ tự chèn dữ liệu trong một bộ, ví dụ, nếu bạn đang xử lý các giao dịch ngân hàng. Mỗi giao dịch phải là duy nhất, và điều quan trọng là bảo tồn thứ tự các giao dịch được tạo. Các bộ đặt hàng Python đã giúp bạn làm điều đó.

Trong bài viết này, chúng tôi sẽ giải thích khái niệm lập trình của một tập hợp được đặt hàng, trước khi chỉ cho bạn cách tạo một trong chương trình Python.

Một bộ trong Python là gì?

Trong ngôn ngữ lập trình Python, một bộ là một tập hợp các yếu tố độc đáo. Đó là một cấu trúc dữ liệu dựa trên bảng băm với thứ tự phần tử không xác định. Bạn có thể duyệt một phần tử tập hợp, thêm hoặc xóa chúng và thực hiện các hoạt động thiết lập tiêu chuẩn của liên minh, giao lộ, bổ sung và khác biệt.


Không giống như danh sách, các bộ thông thường không bảo tồn thứ tự mà chúng tôi chèn các yếu tố. Điều này là do các phần tử trong một bộ thường không được lưu trữ theo thứ tự chúng xuất hiện. & NBSP;

Bộ đặt hàng là gì?

from ordered_set import OrderedSet
setTest = OrderedSet(["First", "Second", "Second", "Third"])
print(setTest)

Cách tạo một bộ được đặt hàng trong Python

OrderedSet(['First', 'Second', 'Third'])

Python cho phép bạn tạo các bộ được đặt hàng trong các chương trình của bạn. Dưới đây, chúng tôi sẽ trình diễn hai cách để làm như vậy: sử dụng gói đặt hàng Python, và phương pháp thủ công. Nhưng trước tiên, hãy để thiết lập một bối cảnh. Hãy để nói rằng bạn đang phát triển một ứng dụng cho một ngân hàng mà bạn cần ghi lại số giao dịch này đến số khác trong một tài liệu tóm tắt. Mỗi hoạt động giao dịch ngân hàng là duy nhất.

Ngoài ra, bạn muốn thứ tự các giao dịch được thực hiện để phản ánh chính xác trong tập dữ liệu của bạn. Đây là một cơ hội hoàn hảo để bạn sử dụng lớp đặt hàng có trong gói PythonTHER Ordered_set.

from ordered_set import OrderedSet
bankStatement = OrderedSet(["BK0001","BK0002","BK0003","BK0004","BK0005"])...

Python sườn đặt hàng lớp tập hợp

Cách đơn giản nhất để tạo một tập hợp được đặt hàng trong Python là sử dụng lớp

list(oset)
# [1, 2, 20, 6, 210]
9. Lưu ý rằng lớp này không được bao gồm theo mặc định. Trước tiên bạn cần đảm bảo bạn đã cài đặt gói đặt hàng.

oset = dict.fromkeys(a).keys()
# dict_keys([1, 2, 20, 6, 210])
0

Lưu ý rằng Set-set là gói của bên thứ ba và chức năng của nó có thể thay đổi độc lập với phiên bản Python mà bạn sử dụng. Để cài đặt gói, hãy nhập lệnh sau vào thiết bị đầu cuối của bạn:

oset = dict.fromkeys(a).keys()
# dict_keys([1, 2, 20, 6, 210])
1

Điều này sẽ cho phép bạn sử dụng lớp

list(oset)
# [1, 2, 20, 6, 210]
9.

oset = dict.fromkeys(a).keys()
# dict_keys([1, 2, 20, 6, 210])
2

Bây giờ, bạn có thể tạo một chương trình Python sử dụng lớp

list(oset)
# [1, 2, 20, 6, 210]
9. Hãy để xem một bộ đơn đặt hàng đơn giản trông như thế nào: & nbsp;

oset = dict.fromkeys(a).keys()
# dict_keys([1, 2, 20, 6, 210])
3


Đầu tiên, chúng tôi nhập

oset - b
# {1, 20, 210}

oset | b
# {1, 2, 5, 6, 20, 210}

oset & b
# {2, 6}

oset ^ b
# {1, 5, 20, 210}
2Package mới cài đặt. Sau đó, chúng tôi tạo một đối tượng khỏi lớp
list(oset)
# [1, 2, 20, 6, 210]
9, chuyển các thành viên dưới dạng tham số. Câu lệnh in trong ví dụ này xuất ra như sau: & nbsp;

Chuỗi ’thứ hai mà chúng tôi đã nhập hai lần khi tạo tập hợp đã biến mất, trong khi thứ tự chúng tôi nhập dữ liệu được duy trì.

Đặt hoạt động

Hãy để viết lại chương trình để tạo hai bộ được đặt hàng khác nhau có thể đại diện cho hai báo cáo ngân hàng.

oset = dict.fromkeys(a).keys()
# dict_keys([1, 2, 20, 6, 210])
4

Chúng tôi cố tình bao gồm các giao dịch

oset - b
# {1, 20, 210}

oset | b
# {1, 2, 5, 6, 20, 210}

oset & b
# {2, 6}

oset ^ b
# {1, 5, 20, 210}
5and
oset - b
# {1, 20, 210}

oset | b
# {1, 2, 5, 6, 20, 210}

oset & b
# {2, 6}

oset ^ b
# {1, 5, 20, 210}
6in cả hai tuyên bố. Đó có thể là trường hợp nếu câu lệnh thứ nhất và thứ hai bao gồm một phần cùng khoảng thời gian.

Nếu bạn muốn xem các giao dịch chỉ tồn tại trong

oset - b
# {1, 20, 210}

oset | b
# {1, 2, 5, 6, 20, 210}

oset & b
# {2, 6}

oset ^ b
# {1, 5, 20, 210}
7, chỉ cần chạy bit mã sau:

oset = dict.fromkeys(a).keys()
# dict_keys([1, 2, 20, 6, 210])
5

Điều này cho chúng ta kết quả sau:

oset = dict.fromkeys(a).keys()
# dict_keys([1, 2, 20, 6, 210])
6

Đối với mục đích dễ đọc, chúng tôi có thể gửi kèm theo tập hợp đã đặt hàng ____38within

oset - b
# {1, 20, 210}

oset | b
# {1, 2, 5, 6, 20, 210}

oset & b
# {2, 6}

oset ^ b
# {1, 5, 20, 210}
9 khi hiển thị dữ liệu bằng mã này:

oset = dict.fromkeys(a).keys()
# dict_keys([1, 2, 20, 6, 210])
7

Bây giờ, nếu bạn chỉ cần truy xuất các giao dịch tồn tại trong cả hai câu lệnh, hãy sử dụng câu lệnh giao nhau như vậy:

oset = dict.fromkeys(a).keys()
# dict_keys([1, 2, 20, 6, 210])
8

Bạn sẽ nhận được kết quả dự định:

oset = dict.fromkeys(a).keys()
# dict_keys([1, 2, 20, 6, 210])
9

Cuối cùng, nếu bạn muốn xem tất cả các giao dịch của cả hai câu lệnh, chỉ cần thực hiện hoạt động của công đoàn:

list(oset)
# [1, 2, 20, 6, 210]
0

Điều này sẽ cung cấp cho bạn đầu ra sau:

list(oset)
# [1, 2, 20, 6, 210]
1

assert {1, 2, 3} == {2, 3, 1}                    # sets (order is ignored)
0Package làm cho việc tạo và thao tác các bộ được đặt hàng trong Python đơn giản và hiệu quả.

Phương pháp thủ công

Cũng có thể tạo một bộ dữ liệu được đặt hàng hoàn toàn bằng tay. Trong trường hợp bạn không thể sử dụng

oset - b
# {1, 20, 210}

oset | b
# {1, 2, 5, 6, 20, 210}

oset & b
# {2, 6}

oset ^ b
# {1, 5, 20, 210}
4Package, bạn vẫn có thể sử dụng cách giải quyết này. Hãy để xem cách thức hoạt động của phương pháp này. & NBSP;


Đầu tiên, chúng tôi sẽ tạo một

assert {1, 2, 3} == {2, 3, 1}                    # sets (order is ignored)
2Array chứa bộ dữ liệu của chúng tôi:

list(oset)
# [1, 2, 20, 6, 210]
2


Sau đó, chúng tôi tạo một vòng

assert {1, 2, 3} == {2, 3, 1}                    # sets (order is ignored)
3 kiểm tra từng phần tử, tìm kiếm các bản sao. Nếu có bất kỳ, chúng sẽ bị xóa khỏi bộ. Để kiểm tra điều này, chúng tôi sẽ cố tình bao gồm một yếu tố trùng lặp trong mảng.

list(oset)
# [1, 2, 20, 6, 210]
3

assert {1, 2, 3} == {2, 3, 1}                    # sets (order is ignored)
3Loop bắt đầu lặp lại từ mặt sau của danh sách, nghĩa là, từ phần tử cuối cùng. Nó lấy phần tử đó (được gọi là
assert {1, 2, 3} == {2, 3, 1}                    # sets (order is ignored)
2Above) và kiểm tra xem nó đã có trong tập hợp con của danh sách cho đến khi nhưng không bao gồm phần tử hiện tại (
assert {1, 2, 3} == {2, 3, 1}                    # sets (order is ignored)
2). Nếu nó đã có mặt, chúng tôi sẽ xóa đề cập đến phần tử gần hơn với mặt trước của danh sách, nhưng hãy giữ đề cập ban đầu về phần tử gần hơn với mặt sau của danh sách.

Bây giờ, khi chúng tôi in nội dung mảng, không có bản sao và thứ tự được duy trì:

list(oset)
# [1, 2, 20, 6, 210]
4

Điều này cho phép chúng tôi tạo một bộ được đặt hàng ngay cả khi chúng tôi không thể sử dụng tính năng chuyên dụng của Python!

Học cách viết mã trực tuyến

Python là ngôn ngữ lập trình đa năng với một vài tùy chọn để tạo các bộ được đặt hàng. Bạn có thể sử dụng lớp

list(oset)
# [1, 2, 20, 6, 210]
9 để hoàn thành công việc hoặc bạn có thể làm như vậy bằng tay nếu cần.

Bạn muốn vượt ra ngoài việc tạo ra sự sáng tạo trong Python?

Giới thiệu do chuyên gia của Udacity, được thiết kế cho chương trình nanodegree lập trình là bước tiếp theo của bạn. Đến cuối khóa học này, bạn sẽ biết những điều cơ bản về mã hóa và có các kỹ năng để tự tin quản lý các kịch bản lập trình trong thế giới thực bằng cách sử dụng HTML, CSS, Python, v.v.

Hoàn thành các ví dụ mã

Ví dụ 1: Tạo đơn đặt hàng giao dịch ngân hàng

list(oset)
# [1, 2, 20, 6, 210]
5

Ví dụ 2: khác biệt, liên minh, giao lộ

list(oset)
# [1, 2, 20, 6, 210]
6

Ví dụ 3: Phương pháp thủ công

list(oset)
# [1, 2, 20, 6, 210]
7

Chúng ta có thể duy trì thứ tự trong tập hợp trong Python không?

Không giống như trong một bộ tiêu chuẩn, thứ tự của dữ liệu trong một tập hợp được đặt hàng được bảo tồn.Chúng tôi đã sử dụng các bộ được đặt hàng khi chúng tôi cần thứ tự chúng tôi nhập dữ liệu để được duy trì trong suốt quá trình của chương trình.Trong một tập hợp được đặt hàng, nhìn vào dữ liệu không thay đổi thứ tự như trong một tập hợp không được đặt hàng.the order of the data in an ordered set is preserved. We used ordered sets when we needed the order in which we entered the data to be maintained over the course of the program. In an ordered set, looking at the data does not change its order as it would in an unordered set.

Các bộ luôn luôn được sắp xếp Python?

Danh sách.Sắp xếp () đã thiết lập quy ước sắp xếp () sắp xếp đối tượng tại chỗ, nhưng một tập hợp không thể được sắp xếp tại chỗ vì các bộ không được đặt hàng.a set cannot be sorted in place because sets are unordered.