Bộ dữ liệu nào nhanh hơn hoặc được đặt trong python?

Các bộ trong Python thường được sử dụng cho hai mục đích. 1. Xóa các mục trùng lặp trong bộ sưu tập 2. Đối với thử nghiệm thành viên. Theo tư cách thành viên, ở đây chúng tôi muốn tìm sự tồn tại của phần tử trong một bộ sưu tập Trọng tâm của bài đăng này là đánh giá hiệu suất của danh sách, bộ dữ liệu và cấu trúc dữ liệu thiết lập đối với nhau trên cơ sở kiểm tra tư cách thành viên. Tôi phải làm nó như thế nào? . bắt đầu = ngày giờ. now() nếu dữ liệu ở dạng. in "" end = datetime. now() print end-start calc(9999, listA) calc(9999, tupA) calc(9999, setA) [/sourcecode] Dưới đây là thời gian trung bình của 10 lần lặp cho các danh sách/bộ và bộ để kiểm tra tư cách thành viên của . 8 0. 8 1. 9 Tìm kiếm 99999 trong bộ 10000000 bộ 2. 6 2. 8 1. 7 Tìm kiếm 999999 trong bộ danh sách 10000000 bộ 21. 4 21. 6 0. 8 Kết luận 1. để kiểm tra tư cách thành viên của các phần tử khi bắt đầu bộ sưu tập, danh sách hoặc bộ dữ liệu hoạt động tốt hơn 100% so với bộ 2. Ngay khi bạn bắt đầu kiểm tra tư cách thành viên của các phần tử ở giữa hoặc cuối tập hợp, các bộ hoạt động tốt hơn 40% – 1800% so với danh sách hoặc bộ. Bây giờ bạn đã có một ý tưởng hợp lý tại sao bạn nên nghĩ đến việc sử dụng các bộ cho các bộ sưu tập lớn…

Các bộ dữ liệu là các kiểu dữ liệu không thể thay đổi được lưu trữ trong một khối bộ nhớ nên không cần thêm dung lượng để lưu trữ các đối tượng mới

Nhưng danh sách là các kiểu dữ liệu có thể thay đổi và được phân bổ thành hai khối trong đó khối cố định chứa tất cả thông tin đối tượng và khối có kích thước thay đổi cho dữ liệu

Có một chút khác biệt về tốc độ lập chỉ mục của danh sách và bộ vì bộ dữ liệu sử dụng ít con trỏ hơn khi lập chỉ mục so với danh sách. Do có ít con trỏ hơn, cơ chế truy cập theo bộ thường nhanh hơn trong danh sách

Chương trình sau đây so sánh điểm chuẩn tốc độ cho danh sách và bộ dữ liệu

Danh sách & So sánh tốc độ Tuple


# Tuple and List Performance Benchmark

# Importing required modules
import random
import time

# Creating list of 2,000,000 containing 
# random numbers between 1 and 5,000,000
my_list = random. sample(range(1, 5000000), 2000000)

# converting list to tuples
my_tuple = tuple(my_list)


# BENCHMARKING FOR LIST

# Measuring start time
start_list = time.time()

# Accessing random elements from list 500,000 times
for i in range(500000):
    element = my_list[random.randint(0, 500000)]

# Measuring stop time
stop_list = time.time();

list_time = stop_list - start_list


# BENCHMARKING FOR TUPLE

# Measuring start time
start_tuple = time.time()

# Accessing random elements from tuple 500,000 times
for i in range(500000):
    element = my_tuple[random.randint(0, 500000)]

# Measuring stop time
stop_tuple = time.time();

tuple_time = stop_tuple - start_tuple


# Displaying results
print('Tuple = %0.6f seconds' % (tuple_time))
print('List = %0.6f seconds' % (list_time))

đầu ra

Run 1:
------------
Tuple = 2.307861 seconds
List = 2.362857 seconds

Run 2:
------------
Tuple = 2.339859 seconds
List = 2.340859 seconds

Run 3:
------------
Tuple = 2.335859 seconds
List = 2.330854 seconds

Run 4:
------------
Tuple = 2.395857 seconds
List = 2.655840 seconds

Run 5:
------------
Tuple = 2.291866 seconds
List = 2.309857 seconds

Kết quả của chương trình trên cho thấy, thời gian truy cập bộ dữ liệu nhanh hơn đối với 4 bài kiểm tra trong số 5 bài kiểm tra đã thực hiện so với danh sách

Vì vậy, chúng ta có thể nói rằng tuple nhanh hơn một chút so với danh sách. Chương trình này được thực hiện trên Intel core I3, 6GB RAM & Python 3. 8. 2. Trên máy của bạn, bạn sẽ nhận được kết quả hơi khác

Mọi thứ trong Python đều là đối tượng. Mỗi đối tượng có các thuộc tính và phương thức dữ liệu riêng được liên kết với nó. Để sử dụng một đối tượng hiệu quả và phù hợp, chúng ta nên biết cách tương tác với chúng

Danh sách, bộ dữ liệu và bộ là 3 loại đối tượng quan trọng. Điểm chung của chúng là chúng được sử dụng làm cấu trúc dữ liệu. Để tạo ra các sản phẩm mạnh mẽ và hoạt động tốt, người ta phải biết rất rõ cấu trúc dữ liệu của ngôn ngữ lập trình

Trong bài đăng này, chúng ta sẽ xem cách các cấu trúc này thu thập và lưu trữ dữ liệu cũng như các thao tác chúng ta có thể thực hiện với chúng. Chúng ta sẽ thấy cả sự khác biệt và tương đồng giữa chúng

Hãy bắt đầu bằng cách giải thích ngắn gọn những đồ vật này là gì. Sau đó chúng tôi sẽ làm các ví dụ để đi vào chi tiết cho từng cái

  • Danh sách là một cấu trúc dữ liệu tích hợp trong Python. Nó được biểu diễn dưới dạng tập hợp các điểm dữ liệu trong ngoặc vuông. Danh sách có thể được sử dụng để lưu trữ bất kỳ loại dữ liệu nào hoặc hỗn hợp các loại dữ liệu khác nhau. Danh sách có thể thay đổi, đó là một trong những lý do tại sao chúng thường được sử dụng
  • Tuple là tập hợp các giá trị được phân tách bằng dấu phẩy và được đặt trong dấu ngoặc đơn. Không giống như danh sách, bộ dữ liệu là bất biến. Tính bất biến có thể được coi là đặc điểm nhận dạng của các bộ dữ liệu
  • Set là một tập hợp không có thứ tự của các đối tượng bất biến riêng biệt. Một tập hợp chứa các phần tử duy nhất. Mặc dù các tập hợp có thể thay đổi, nhưng các phần tử của các tập hợp phải là bất biến. Không có thứ tự liên kết với các phần tử của một tập hợp. Do đó, nó không hỗ trợ lập chỉ mục hoặc cắt như chúng ta làm với danh sách

List vs Tuple vs Set (hình ảnh của tác giả)

Bây giờ chúng ta có một sự hiểu biết cơ bản về những đối tượng này là gì. Các ví dụ sau sẽ trình bày cách chúng ta có thể tương tác với các đối tượng này

1. Danh sách vs Tập hợp

Chúng ta có thể tạo một danh sách hoặc tập hợp dựa trên các ký tự trong một chuỗi. Các chức năng để sử dụng là các chức năng danh sách và thiết lập

text = "Hello World!"print(list(text))
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!']
print(set(text))
{'H', 'W', 'o', ' ', 'l', 'r', '!', 'e', 'd'}

Sự khác biệt trong danh sách kết quả và thiết lập các đối tượng

  • Danh sách chứa tất cả các ký tự trong khi tập hợp chỉ chứa các ký tự duy nhất
  • Danh sách được sắp xếp dựa trên thứ tự của các ký tự trong chuỗi. Không có thứ tự liên kết với các mục trong bộ

2. Danh sách so với Tập hợp - lập chỉ mục

Trong ví dụ trước, chúng ta đã thấy rằng các tập hợp không có thứ tự. Do đó, chúng ta không thể thực hiện việc cắt hoặc lập chỉ mục trên các tập hợp như chúng ta làm với danh sách

text = "Hello World!"list_a = list(text)
print(list_a[:2])
['H','e']
set_a = set(text)
print(set_a[:2])
TypeError: 'set' object is not subscriptable

Việc cắt hoặc lập chỉ mục trên các tập hợp làm tăng TypeError vì đây là sự cố liên quan đến thuộc tính của loại đối tượng tập hợp

3. Danh sách so với Tuple

Sự khác biệt giữa danh sách và tuple là khả năng biến đổi. Không giống như danh sách, bộ dữ liệu là bất biến. Chẳng hạn, chúng ta có thể thêm các mục vào danh sách nhưng không thể làm điều đó với các bộ dữ liệu

list_a = [1,2,3,4]
list_a.append(5)
print(list_a)
[1,2,3,4,5]
tuple_a = (1,2,3,4)
tuple_a.append(5)
AttributeError: 'tuple' object has no attribute 'append'

Các chức năng thay đổi một bộ sưu tập (e. g. nối thêm, xóa, mở rộng, bật) không áp dụng cho bộ dữ liệu

4. Tuple - các phần tử có thể thay đổi

Tính bất biến có thể là đặc điểm dễ nhận biết nhất của các bộ dữ liệu. Chúng tôi không thể gán cho các mục riêng lẻ của một bộ dữ liệu

tuple_a = (3, 5, 'x', 5)
tuple_a[0] = 7 #error

Mặc dù các bộ dữ liệu là bất biến, nhưng chúng có thể chứa các phần tử có thể thay đổi như danh sách hoặc tập hợp

tuple_a = ([1,3], 'a', 'b', 8)
tuple_a[0][0] = 99
print(tuple_a)
([99, 3], 'a', 'b', 8)

5. chức năng xóa

Hàm Del là viết tắt của từ delete nên dùng để xóa một mục khỏi bộ sưu tập. Nó lấy chỉ mục của mục cần xóa

Vì các bộ không có thứ tự nên chúng không có chỉ mục các mục trong đó. Do đó, chức năng del không thể được sử dụng trên một tập hợp

list_a = [1, 2, 3, 4]
del(list_a[0])
print(list_a)
[2, 3, 4]

Ghi chú. Có hai cách để lập chỉ mục một danh sách

  • Từ đầu đến cuối. 0, 1, 2, 3
  • Từ cuối đến đầu. -1, -2, -3

6. Loại bỏ chức năng

Không giống như hàm del, hàm xóa có thể được sử dụng trên cả danh sách và tập hợp. Chúng tôi chuyển mục cần xóa thay vì chỉ mục của nó

________số 8

7. hủy bỏ chức năng

Loại bỏ cũng có thể được sử dụng để xóa một mục khỏi một bộ. Danh sách không có thuộc tính loại bỏ mặc dù

Sự khác biệt giữa "xóa" và "loại bỏ" được quan sát thấy khi chúng tôi cố gắng xóa một mục không có trong tập hợp. Loại bỏ sẽ gây ra lỗi nhưng không có gì xảy ra với loại bỏ

#remove
a = {1,2,3}
a.remove(5)
KeyError: 5
#discard
a = {1,2,3}
a.discard(5)
print(a)
{1,2,3}

8. chức năng bật lên

Chức năng pop có thể được sử dụng trên cả danh sách và bộ. Tuy nhiên, nó hoạt động khác nhau trên danh sách và tập hợp

Theo mặc định, hàm pop xóa mục cuối cùng khỏi danh sách và trả về mục đó. Vì vậy, chúng ta có thể gán nó cho một biến. Chúng ta có thể chuyển một chỉ mục cho hàm pop loại bỏ một phần tử tại một chỉ mục cụ thể. Chẳng hạn, pop(-2) sẽ xóa mục thứ hai từ cuối

Run 1:
------------
Tuple = 2.307861 seconds
List = 2.362857 seconds

Run 2:
------------
Tuple = 2.339859 seconds
List = 2.340859 seconds

Run 3:
------------
Tuple = 2.335859 seconds
List = 2.330854 seconds

Run 4:
------------
Tuple = 2.395857 seconds
List = 2.655840 seconds

Run 5:
------------
Tuple = 2.291866 seconds
List = 2.309857 seconds
0

Khi được sử dụng trên một tập hợp, hàm pop sẽ loại bỏ một mục tùy ý vì không có chỉ mục hoặc thứ tự trong một tập hợp

Run 1:
------------
Tuple = 2.307861 seconds
List = 2.362857 seconds

Run 2:
------------
Tuple = 2.339859 seconds
List = 2.340859 seconds

Run 3:
------------
Tuple = 2.335859 seconds
List = 2.330854 seconds

Run 4:
------------
Tuple = 2.395857 seconds
List = 2.655840 seconds

Run 5:
------------
Tuple = 2.291866 seconds
List = 2.309857 seconds
1

9. Danh sách hoặc Set hoặc Tuple

Các đối tượng bộ sưu tập này có thể được chuyển đổi từ cái này sang cái khác. Các chức năng để sử dụng, như tên gợi ý, liệt kê, tuple và đặt

text = "Hello World!"list_a = list(text)
print(list_a[:2])
['H','e']
set_a = set(text)
print(set_a[:2])
TypeError: 'set' object is not subscriptable
0

10. Thêm các mặt hàng mới

Vì các bộ dữ liệu là bất biến, nên chúng ta chỉ có thể thêm các mục mới vào danh sách hoặc tập hợp. Chúng tôi có nhiều lựa chọn thay thế hơn khi thay đổi danh sách do được sắp xếp hoặc lập chỉ mục

Chẳng hạn, phương thức append thêm một mục vào cuối danh sách. Vì các tập hợp không có khái niệm về kết thúc hoặc bắt đầu nên chúng ta không thể sử dụng phương thức chắp thêm. Đối với các bộ, phương thức thêm được sử dụng để thêm các mục mới

text = "Hello World!"list_a = list(text)
print(list_a[:2])
['H','e']
set_a = set(text)
print(set_a[:2])
TypeError: 'set' object is not subscriptable
1

11. Chèn một mục vào danh sách

Chức năng chèn cũng được sử dụng để thêm một phần tử vào danh sách. Tuy nhiên, nó cho phép chỉ định chỉ mục của phần tử mới. Chẳng hạn, chúng ta có thể thêm một phần tử mới vào đầu danh sách (index=0)

text = "Hello World!"list_a = list(text)
print(list_a[:2])
['H','e']
set_a = set(text)
print(set_a[:2])
TypeError: 'set' object is not subscriptable
2

Vì nó yêu cầu một chỉ mục, chúng tôi không thể sử dụng chức năng chèn trên các tập hợp

12. Kết hợp hai đối tượng

Sẽ có trường hợp chúng ta cần thêm các mục cùng loại với nhau. Chúng tôi có nhiều tùy chọn để kết hợp các đối tượng của danh sách, bộ dữ liệu và bộ

Toán tử “+” có thể được sử dụng để thêm danh sách hoặc bộ nhưng không phải bộ

text = "Hello World!"list_a = list(text)
print(list_a[:2])
['H','e']
set_a = set(text)
print(set_a[:2])
TypeError: 'set' object is not subscriptable
3

Chúng ta có thể sử dụng toán tử hợp để kết hợp hai bộ. Các phần tử trùng lặp sẽ bị xóa

text = "Hello World!"list_a = list(text)
print(list_a[:2])
['H','e']
set_a = set(text)
print(set_a[:2])
TypeError: 'set' object is not subscriptable
4

Ghi chú. Ký hiệu tập hợp tương tự như ký hiệu từ điển trong Python. Sự khác biệt là khi tạo từ điển, chúng tôi đặt các cặp khóa-giá trị bên trong dấu ngoặc nhọn thay vì các mục đơn lẻ

Chúng ta cần ghi nhớ điều đó khi tạo một từ điển trống. Nếu chúng ta chỉ sử dụng dấu ngoặc nhọn mà không có gì bên trong, Python sẽ nghĩ đó là từ điển rỗng. Chúng ta có thể sử dụng hàm set để tạo một tập rỗng

text = "Hello World!"list_a = list(text)
print(list_a[:2])
['H','e']
set_a = set(text)
print(set_a[:2])
TypeError: 'set' object is not subscriptable
5

13. Sắp xếp

Chúng ta chỉ có thể nói về việc sắp xếp nếu có thứ tự. Do đó, sắp xếp áp dụng cho danh sách và bộ dữ liệu. Không thể sắp xếp các bộ vì không có thứ tự

Chức năng sắp xếp sửa đổi đối tượng mà nó được áp dụng. Vì vậy, chúng tôi chỉ có thể sử dụng nó trên danh sách. Tuples là bất biến vì vậy chúng tôi không thể sắp xếp chúng

text = "Hello World!"list_a = list(text)
print(list_a[:2])
['H','e']
set_a = set(text)
print(set_a[:2])
TypeError: 'set' object is not subscriptable
6

Tuy nhiên, chúng ta có thể sử dụng chức năng sắp xếp trên bộ dữ liệu. Nó tạo ra một danh sách được sắp xếp của bất kỳ lần lặp nào. Vì vậy, chúng ta có thể sử dụng nó để tạo một danh sách được sắp xếp dựa trên một tuple

text = "Hello World!"list_a = list(text)
print(list_a[:2])
['H','e']
set_a = set(text)
print(set_a[:2])
TypeError: 'set' object is not subscriptable
7
  • loại(). sắp xếp đối tượng nhưng không trả lại bất cứ thứ gì
  • sắp xếp(). trả về một danh sách các mục được sắp xếp trong một lần lặp nhưng không sửa đổi đối tượng ban đầu

14. Đang cập nhật một bộ

Phương thức cập nhật có thể được sử dụng để cập nhật một tập hợp theo các mục trong các lần lặp khác. Do tính chất của bộ, các mục trùng lặp sẽ bị xóa khi cập nhật

text = "Hello World!"list_a = list(text)
print(list_a[:2])
['H','e']
set_a = set(text)
print(set_a[:2])
TypeError: 'set' object is not subscriptable
8

15. Len và đếm

Hàm len trả về độ dài (i. e. số mục) của một bộ sưu tập. Nó hoạt động trên danh sách, bộ dữ liệu và bộ

Hàm đếm có thể được sử dụng để đếm số lần xuất hiện của một phần tử cụ thể. Nó chỉ được sử dụng với danh sách và bộ dữ liệu. Vì các bộ không chứa bất kỳ mục trùng lặp nào nên số lượng là 1 cho tất cả các mục

text = "Hello World!"list_a = list(text)
print(list_a[:2])
['H','e']
set_a = set(text)
print(set_a[:2])
TypeError: 'set' object is not subscriptable
9

Sự kết luận

Chúng tôi đã đề cập đến sự khác biệt và tương đồng giữa 3 cấu trúc dữ liệu thiết yếu trong Python. Tôi đã cố gắng thiết kế các ví dụ để làm nổi bật những điểm quan trọng cần lưu ý khi tương tác với các đối tượng này

Có nhiều phương thức và thao tác có thể hoạt động trên các đối tượng này. Chẳng hạn, khả năng hiểu danh sách khá hữu ích trong phân tích và thao tác dữ liệu

Sự hiểu biết toàn diện về cấu trúc dữ liệu là rất quan trọng vì cấu trúc của chúng là những phần cơ bản của bất kỳ ngôn ngữ lập trình nào. Chúng cũng là những yếu tố chính trong việc thiết kế các thuật toán

Bộ hoặc bộ danh sách nào nhanh hơn?

Tạo bộ nhanh hơn tạo danh sách . Tạo danh sách chậm hơn vì cần truy cập hai khối bộ nhớ. Một phần tử trong bộ không thể bị xóa hoặc thay thế. Một phần tử trong danh sách có thể được loại bỏ hoặc thay thế.

Cái gì nhanh hơn set trong Python?

Nói chung, danh sách nhanh hơn bộ. Nhưng trong trường hợp tìm kiếm một phần tử trong một tập hợp, các tập hợp sẽ nhanh hơn vì các tập hợp đã được triển khai bằng cách sử dụng bảng băm .