Hướng dẫn convert list to set without changing order python - chuyển đổi danh sách thành thiết lập mà không thay đổi thứ tự 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

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

Để loại bỏ các bản sao khỏi danh sách Python trong khi bảo tồn thứ tự của các phần tử, hãy sử dụng mã

oset = dict.fromkeys(a).keys()
# dict_keys([1, 2, 20, 6, 210])
4 trải qua hai giai đoạn: (1) Chuyển đổi danh sách thành một dict (2) Chuyển đổi từ điển trở lại danh sách bằng hàm tạo
oset = dict.fromkeys(a).keys()
# dict_keys([1, 2, 20, 6, 210])
7. Khi từ điển bảo tồn thứ tự của các khóa, thứ tự danh sách được bảo tồn.

Làm thế nào để loại bỏ các bản sao khỏi danh sách Python?

Vấn đề: Làm thế nào để loại bỏ các bản sao khỏi danh sách Python trong khi vẫn giữ thứ tự của các yếu tố danh sách được bảo tồn?: How to remove duplicates from a Python list while keeping the order of the list elements preserved?

Bạn có thể thấy câu hỏi này hơi khó xử. Những gì đã loại bỏ các bản sao để làm với việc bảo tồn thứ tự của các yếu tố? Lý do rất đơn giản: Một cách nổi tiếng và hiệu quả để loại bỏ các bản sao khỏi danh sách là để chuyển đổi danh sách thành một bộ mà không được sao chép miễn phí và chuyển đổi nó trở lại danh sách. Ở đây, những gì bạn có thể tìm thấy ở khắp mọi nơi:

lst = [42, 42, 'Alice', 'Alice', 1]
dup_free = list(set(lst))
print(dup_free)
# ['Alice', 42, 1]

Chuyển đổi qua lại

oset = dict.fromkeys(a).keys()
# dict_keys([1, 2, 20, 6, 210])
8 loại bỏ tất cả các bản sao khỏi danh sách. Tuy nhiên, nó không bảo tồn thứ tự của các yếu tố. Trong ví dụ, chuỗi
oset = dict.fromkeys(a).keys()
# dict_keys([1, 2, 20, 6, 210])
9 hiện xuất hiện trước số nguyên
list(oset)
# [1, 2, 20, 6, 210]
0.

Vì vậy, làm thế nào để loại bỏ các bản sao trong khi bảo tồn thứ tự của các yếu tố?

Hướng dẫn convert list to set without changing order python - chuyển đổi danh sách thành thiết lập mà không thay đổi thứ tự python

Cách tiếp cận nhanh nhất và nhanh nhất là sử dụng từ điển:

lst = [3, 3, 22, 22, 1]
result = list(dict.fromkeys(lst))
print(result)
# [3, 22, 1]

Phương thức

oset = dict.fromkeys(a).keys()
# dict_keys([1, 2, 20, 6, 210])
5 tạo ra một từ điển mới sử dụng các phần tử từ các khóa từ điển. Khi điều này đã được thực hiện với danh sách ban đầu của chúng tôi, chuyển đổi kết quả trở lại từ điển trong danh sách không trùng lặp.

Đây là cách pythonic nhất để loại bỏ các bản sao khỏi danh sách Python trong khi bảo tồn thứ tự.

Phương pháp này có nhanh không? Giống như các bộ, từ điển sử dụng bảng băm, có nghĩa là chúng cực kỳ nhanh.Like sets, dictionaries use hash tables, which means they are extremely fast.

Bạn có muốn phát triển các kỹ năng của một Python Professional toàn diện trong khi được trả tiền trong quá trình này không? Trở thành một freelancer Python và đặt hàng cuốn sách của bạn rời khỏi cuộc đua chuột với Python trên Amazon (Kindle/Print)!well-rounded Python professional—while getting paid in the process? Become a Python freelancer and order your book Leaving the Rat Race with Python on Amazon (Kindle/Print)!

Hướng dẫn convert list to set without changing order python - chuyển đổi danh sách thành thiết lập mà không thay đổi thứ tự python

  • Từ điển Python có bảo tồn thứ tự của các phím không?
  • Loại bỏ các bản sao khỏi danh sách đã đặt hàng cho các phiên bản cũ hơn
  • Shell mã tương tác
  • Đi đâu từ đây?

Từ điển Python có bảo tồn thứ tự của các phím không?

Loại bỏ các bản sao khỏi danh sách đã đặt hàng cho các phiên bản cũ hơn

Shell mã tương tác

Đi đâu từ đây?

lst = ['Alice', 'Bob', 'Bob', 1, 1, 1, 2, 3, 3]
dic = dict.fromkeys(lst)
print(dic)
# {'Alice': None, 'Bob': None, 1: None, 2: None, 3: None}

Đáng ngạc nhiên, các phím từ điển trong Python bảo tồn thứ tự của các yếu tố. Vì vậy, vâng, thứ tự của các yếu tố được bảo tồn. (nguồn)

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

Vô số tài nguyên trực tuyến như thế này cho rằng thứ tự của các khóa từ điển không được bảo tồn. Họ giả định rằng việc triển khai cơ bản của khóa từ điển sử dụng các tập hợp các bộ và các bộ được biết đến là bất khả tri đối với thứ tự của các yếu tố. Nhưng giả định này là sai. Việc triển khai từ điển Python tích hợp trong CPython bảo tồn đơn đặt hàng.

Ở đây, một ví dụ khác:

Bạn thấy rằng thứ tự của các phần tử được bảo tồn vì vậy khi chuyển đổi nó trở lại, thứ tự ban đầu của các yếu tố danh sách vẫn được bảo tồn: How to Remove Duplicates From a Python List?

Loại bỏ các bản sao khỏi danh sách đã đặt hàng cho các phiên bản cũ hơn

Shell mã tương tác

Đi đâu từ đây?

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

Đáng ngạc nhiên, các phím từ điển trong Python bảo tồn thứ tự của các yếu tố. Vì vậy, vâng, thứ tự của các yếu tố được bảo tồn. (nguồn)

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

Shell mã tương tác

Đi đâu từ đây?

Đáng ngạc nhiên, các phím từ điển trong Python bảo tồn thứ tự của các yếu tố. Vì vậy, vâng, thứ tự của các yếu tố được bảo tồn. (nguồn)Run the code. Does it work?

Vô số tài nguyên trực tuyến như thế này cho rằng thứ tự của các khóa từ điển không được bảo tồn. Họ giả định rằng việc triển khai cơ bản của khóa từ điển sử dụng các tập hợp các bộ và các bộ được biết đến là bất khả tri đối với thứ tự của các yếu tố. Nhưng giả định này là sai. Việc triển khai từ điển Python tích hợp trong CPython bảo tồn đơn đặt hàng.

Ở đây, một ví dụ khác: Python List: Remove Duplicates and Keep the Order

Đi đâu từ đây?

Đáng ngạc nhiên, các phím từ điển trong Python bảo tồn thứ tự của các yếu tố. Vì vậy, vâng, thứ tự của các yếu tố được bảo tồn. (nguồn)

Vô số tài nguyên trực tuyến như thế này cho rằng thứ tự của các khóa từ điển không được bảo tồn. Họ giả định rằng việc triển khai cơ bản của khóa từ điển sử dụng các tập hợp các bộ và các bộ được biết đến là bất khả tri đối với thứ tự của các yếu tố. Nhưng giả định này là sai. Việc triển khai từ điển Python tích hợp trong CPython bảo tồn đơn đặt hàng.

Ở đây, một ví dụ khác:

Bạn thấy rằng thứ tự của các phần tử được bảo tồn vì vậy khi chuyển đổi nó trở lại, thứ tự ban đầu của các yếu tố danh sách vẫn được bảo tồn:

Tuy nhiên, bạn không thể dựa vào nó bởi vì bất kỳ việc thực hiện Python nào cũng có thể, về mặt lý thuyết, quyết định không bảo tồn đơn đặt hàng (thông báo về việc có thể có thể ở đây là 100% lý thuyết và không áp dụng cho việc thực hiện CPython mặc định).

Nếu bạn cần chắc chắn rằng đơn đặt hàng được bảo tồn, bạn có thể sử dụng thư viện từ điển được đặt hàng. Trong Cpython, đây chỉ là một trình bao bọc cho việc thực hiện Dict mặc định.YES!, consider becoming a Python freelance developer! It’s the best way of approaching the task of improving your Python skills—even if you are a complete beginner.

Bài viết nguồn: Làm thế nào để loại bỏ các bản sao khỏi danh sách Python?

Từ điển chỉ được đặt hàng trong tất cả các triển khai Python khi Python 3.7 được phát hành (đây cũng là một chi tiết triển khai của CPython 3.6). & NBSP;

Hướng dẫn convert list to set without changing order python - chuyển đổi danh sách thành thiết lập mà không thay đổi thứ tự python

Vì vậy, nếu bạn sử dụng phiên bản Python cũ hơn, bạn sẽ cần nhập lớp

list(oset)
# [1, 2, 20, 6, 210]
2 từ gói bộ sưu tập trong thư viện tiêu chuẩn thay thế: thay vào đó:

Đầu ra là danh sách không trùng lặp sau với thứ tự của các yếu tố được bảo tồn:

Hãy để thử phương pháp này trong vỏ Python tương tác của chúng tôi:

Danh sách chuyển đổi để thiết lập lệnh bảo tồn?

Mới!Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn.

Làm thế nào để bạn duy trì một thứ tự thiết lập trong Python?

Lớp đặt được đặt hàng của Python trước tiên bạn cần đảm bảo bạn đã cài đặt gói đặt hàng.Điều này sẽ cho phép bạn sử dụng lớp đặt hàng.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ì.Bộ đặt hàng được tạo ra.make sure you have the ordered-set package installed. This will enable you to use the OrderedSet class. The string 'Second' that we entered twice when creating the set is now gone, while the order in which we entered data is maintained. The ordered set is created.

Làm cách nào để chuyển đổi danh sách thành một bộ trong Python?

Bạn có thể sử dụng hàm python set () để chuyển đổi danh sách thành set. Đó là cách đơn giản nhất để chuyển đổi danh sách thành SET.Vì tập hợp không cho phép sao chép, khi bạn chuyển đổi danh sách thành SET, tất cả các bản sao sẽ được xóa trong tập hợp.use python set() function to convert list to set.It is simplest way to convert list to set. As Set does not allow duplicates, when you convert list to set, all duplicates will be removed in the set.

Việc chuyển đổi một đối tượng thành một tập hợp có duy trì thứ tự đối tượng không?

1. Việc chuyển đổi một đối tượng thành một tập hợp có duy trì thứ tự của đối tượng không?Không. Một tập hợp không phải là một cấu trúc dữ liệu được đặt hàng, vì vậy thứ tự không được duy trì.order is not maintained.