Hướng dẫn are sets faster than lists python - được đặt nhanh hơn so với danh sách python

Những gì nhanh hơn ..

Như Wikipedia nói rằng thử nghiệm thành viên của người Viking với các bộ và từ điển nhanh hơn nhiều, O (1), so với các chuỗi tìm kiếm, O (n). Khi thử nghiệm một trong một trong bv, B phải là một tập hợp hoặc từ điển thay vì một danh sách hoặc tuple.Membership testing with sets and dictionaries is much faster, O(1), than searching sequences, O(n). When testing “a in b”, b should be a set or dictionary instead of a list or tuple.

Bạn phải sử dụng các bộ thay thế danh sách bất cứ khi nào tốc độ quan trọng trong mã của bạn, nhưng bạn đã bao giờ tự hỏi tại sao các bộ nhanh hơn nhiều so với danh sách. Vì vậy, hãy để Lừa xem chính xác những gì đang diễn ra đằng sau hậu trường trong Python để làm cho bộ nhanh hơn?

Các bộ được triển khai bằng các bảng băm, vì vậy bất cứ khi nào bạn thêm một đối tượng vào một tập hợp, vị trí trong bộ nhớ của đối tượng set được xác định bằng cách sử dụng băm của đối tượng được thêm vào. are implemented using hash tables , So whenever you add an object to a set, the position within the memory of the set object is determined using the hash of the object to be added.

Và khi kiểm tra tư cách thành viên, tất cả những gì cần phải thực hiện về cơ bản là để xem nếu đối tượng ở vị trí được xác định bởi băm của nó, do đó, tốc độ của thao tác này không phụ thuộc vào kích thước của tập hợp.

Đối với các danh sách, ngược lại, toàn bộ danh sách cần được tìm kiếm, sẽ trở nên chậm hơn khi danh sách phát triển. lists, in contrast, the whole list needs to be searched, which will become slower as the list grows.

Hãy để hiểu điều này thông qua một ví dụ:

list: Hãy tưởng tượng bạn đang tìm kiếm cây bút của mình, nhưng bạn không biết cây bút của bạn là gì, vì vậy bạn phải tìm kiếm ngăn kéo bằng ngăn kéo cho đến khi bạn tìm thấy nó (hoặc có thể bạn không bao giờ làm). Đó là những gì chúng tôi gọi là O (n), bởi vì trong kịch bản tồi tệ nhất, bạn sẽ nhìn vào tất cả các ngăn kéo của mình (trong đó n là số lượng ngăn kéo).

set: Bây giờ, hãy tưởng tượng bạn vẫn đang tìm kiếm cây bút của mình, nhưng bây giờ bạn đã biết cây bút của bạn đang ở trong ngăn kéo thứ 8. Vì vậy, bạn sẽ chỉ tìm kiếm trong ngăn kéo thứ 8, thay vì tìm kiếm trong tất cả các ngăn kéo. Đó là những gì chúng tôi gọi là O (1), bởi vì trong kịch bản tồi tệ nhất, bạn sẽ nhìn chỉ trong một ngăn kéo.

Danh sách Python được triển khai dưới dạng dynamic arrays và các bộ được triển khai dưới dạng hash tables.lists are implemented as dynamic arrays and sets are implemented as a hash tables.

Bạn phải giữ một điều quan trọng nhất trong tâm trí của mình: bộ đó không nhanh hơn danh sách nói chung - Tinh hoàn thành viên nhanh hơn cho các bộ, và việc loại bỏ một yếu tố và miễn là bạn không cần các hoạt động này, Thường nhanh hơn.membership testis faster for sets, and so is removing an element , and As long as you don’t need these operations, lists are often faster.

Và khi bạn đi sâu hơn trong việc này, bạn sẽ biết rằng tập hợp so với danh sách phụ thuộc phần lớn vào hoạt động chúng ta đang thực hiện như thế nào,

  • Nếu chúng ta đang thêm một phần tử - thì một bộ không cần di chuyển bất kỳ dữ liệu nào và tất cả những gì nó cần làm là tính toán giá trị băm và thêm nó vào bảng nhưng đối với việc chèn danh sách thì có khả năng sẽ có dữ liệu được di chuyển.adding an element — then a set doesn’t need to move any data, and all it needs to do is calculate a hash value and add it to a table but for a list insertion then potentially there is data to be moved.
  • Nếu chúng ta đang xóa một phần tử - tất cả một bộ cần làm là xóa mục nhập băm khỏi bảng băm, để biết danh sách mà nó có khả năng cần di chuyển dữ liệu xung quanh.deleting an element — all a set needs to do is remove the hash entry from the hash table, for a list it potentially needs to move data around.
  • Nếu chúng ta đang tìm kiếm (nghĩa là một toán tử trong) - một tập hợp chỉ cần tính giá trị băm của mục dữ liệu, hãy tìm giá trị băm đó trong bảng băm và nếu nó ở đó - thì Bingo. Đối với một danh sách, lần lượt tìm kiếm phải tra cứu từng mục. Ngay cả đối với nhiều 1000 mặt hàng, một bộ sẽ nhanh hơn nhiều để tìm kiếm.searching (i.e. an in operator) — a set just needs to calculate the hash value of the data item, find that hash value in the hash table, and if it is there — then bingo. For a list, the search has to look up each item in turn . Even for many 1000s of items a set will be far quicker to search.

Lưu ý: Các bộ aren nhanh hơn các danh sách nói chung - kiểm tra thành viên nhanh hơn cho các bộ, và do đó sẽ loại bỏ một phần tử. Miễn là bạn không cần các hoạt động này, danh sách thường nhanh hơn.Sets aren’t faster than lists in general — membership test is faster for sets, and so is removing an element. As long as you don’t need these operations, lists are often faster.

Hy vọng bài viết này có thể hữu ích cho bạn.

Tiếp tục học hỏi!

1248

Phiếu bầu

1045

Câu trả lời

мя и т

abusechallengesfakelet'smoderatorsreportsafestaytogether challenges fake let's moderators report safe stay together

tiếng Nga

Benka

Hướng dẫn are sets faster than lists python - được đặt nhanh hơn so với danh sách python

309

Phiếu bầu

1313

Câu trả lời

мя и т

tiếng Nga challenge wap

Benka

7/6/2017 5:02:16 PM

Hướng dẫn are sets faster than lists python - được đặt nhanh hơn so với danh sách python

12

Phiếu bầu

46

Câu trả lời

мя и т

tiếng Nga

Benka

7/6/2017 5:02:16 PM

Hướng dẫn are sets faster than lists python - được đặt nhanh hơn so với danh sách python

559

Phiếu bầu

14120

Câu trả lời

мя и т

tiếng Nga codes popular share upvotes

Benka

7/6/2017 5:02:16 PM

Hướng dẫn are sets faster than lists python - được đặt nhanh hơn so với danh sách python

1546

Phiếu bầu

30542

Câu trả lời

мя и т

tiếng Nga

Benka

7/6/2017 5:02:16 PM

Hướng dẫn are sets faster than lists python - được đặt nhanh hơn so với danh sách python

15

Phiếu bầu

22

Câu trả lời

мя и т

jsjsonnpmpackage.jsonsemver json npm package.json semver

tiếng Nga

Benka

Hướng dẫn are sets faster than lists python - được đặt nhanh hơn so với danh sách python

5

Phiếu bầu

31

Câu trả lời

мя и т

tiếng Nga

Benka

7/6/2017 5:02:16 PM

Hướng dẫn are sets faster than lists python - được đặt nhanh hơn so với danh sách python

3068

Phiếu bầu

1593

Câu trả lời

мя и т

tiếng Nga rules welcome

Benka

7/6/2017 5:02:16 PM

Hướng dẫn are sets faster than lists python - được đặt nhanh hơn so với danh sách python

6

Phiếu bầu

19

Sự khác biệt trong ‘~ và và‘^là gì?

Matthias

4/9/2021 1:48:15 PM searching sorting

Hai câu trả lời khác nhau

JavaScript

Hướng dẫn are sets faster than lists python - được đặt nhanh hơn so với danh sách python

7

Phiếu bầu

40

Câu trả lời

мя и т

tiếng Nga objects

Benka

7/6/2017 5:02:16 PM

Hướng dẫn are sets faster than lists python - được đặt nhanh hơn so với danh sách python

3

Phiếu bầu

29

Câu trả lời

мя и т

tiếng Nga

Benka

7/6/2017 5:02:16 PM

Hướng dẫn are sets faster than lists python - được đặt nhanh hơn so với danh sách python

24

Phiếu bầu

31

Câu trả lời

мя и т

tiếng Nga dm notifications

Benka

7/6/2017 5:02:16 PM

Hướng dẫn are sets faster than lists python - được đặt nhanh hơn so với danh sách python

0

Phiếu bầu

11

Câu trả lời

мя и т

tiếng Nga and flowchart

Benka

7/6/2017 5:02:16 PM

Hướng dẫn are sets faster than lists python - được đặt nhanh hơn so với danh sách python

4

Phiếu bầu

17

Câu trả lời

мя и т

c#

tiếng Nga

Benka

Hướng dẫn are sets faster than lists python - được đặt nhanh hơn so với danh sách python

Các hoạt động được thiết lập có nhanh hơn trong Python không?

Chúng tôi biết làm thế nào trong Python, bộ có thể lặp lại nhanh hơn danh sách. Lý do đằng sau nó là gì? Đặt được thực hiện bởi cấu trúc dữ liệu bảng băm. Vì lý do này, việc kiểm tra xem một giá trị cụ thể có tồn tại trong tập hợp hay không, là thời gian O (1) tức thì, không cần lặp lại.set can be iterate faster than list. What's the reason behind it? Set is implemented by a hash-table data structure. For this reason, checking if a specific value exists in the set, is instant O(1) time, requires no iteration.

Danh sách hoặc tuple nhanh hơn hoặc được đặt trong Python?

Tạo một tuple nhanh hơn so với việc tạo một danh sách.Tạo danh sách chậm hơn vì hai khối bộ nhớ cần được truy cập.Một phần tử trong một tuple không thể được loại bỏ hoặc thay thế.Một yếu tố trong danh sách có thể được xóa hoặc thay thế.. Creating a list is slower because two memory blocks need to be accessed. An element in a tuple cannot be removed or replaced. An element in a list can be removed or replaced.

Danh sách hoặc Tuple hoặc bộ nhanh hơn là gì?

Tuples nhanh hơn danh sách.Chúng ta nên sử dụng một tuple thay vì một danh sách nếu chúng ta xác định một tập hợp các giá trị không đổi và tất cả những gì chúng ta sẽ làm với nó là lặp đi lặp lại thông qua nó.Nếu chúng ta cần một loạt các phần tử được sử dụng làm khóa từ điển, chúng ta có thể sử dụng các bộ dữ liệu.. We should use a Tuple instead of a List if we are defining a constant set of values and all we are ever going to do with it is iterate through it. If we need an array of elements to be used as dictionary keys, we can use Tuples.

Danh sách hoặc bộ nào hiệu quả hơn?

Bộ sử dụng băm để thực hiện các cái nhìn giúp chúng nhanh hơn danh sách về vấn đề này.(Trong ví dụ thực tế, mã sử dụng danh sách mất khoảng 45 giây để chạy, trong khi mã với các bộ mất ít hơn một phần mười giây!) in this regard. (In the practical example the code using lists took about 45 seconds to run, whereas the code with sets took less than a tenth of a second!)